java - 如何在 mysql SELECT 查询中使用文本字段输入
问题描述
我正在使用 Java netbeans 和 mysql。我想检查用户在文本字段 tf 中输入的值是否已经存在于 mysql 表中。
String query1="SELECT * FROM trytable WHERE name='8'";
ResultSet rs=stmt.executeQuery(query1);
if(rs.isBeforeFirst()==true){JOptionPane.showMessageDialog(null,"already");}
在上面的代码中代替 8 我想给出用户在表单中输入的值,然后检查该值是否已经存在于表单中。
请在第一行帮助我。谢谢
解决方案
您应该使用 aPreparedStatement
而不是常规语句。这比普通的更安全Statement
,可以避免SQL 注入问题。
您可以像这样更改您的查询:
String query = "SELECT * FROM trytable WHERE name='?';";
请注意?
查询末尾的 。这可以在您的代码中稍后在设置时替换PreparedStatement
:
PreparedStatement preparedStatement = connection.prepareStatement(query);
preparedStatement.setString(1, userInput);
ResultSet rs = preparedStatement.executeQuery();
if (rs.next()) System.out.println("Record exists!");
在这里,您告诉准备好的语句将?
查询中的第一个语句替换为userInput
. 因此,如果用户输入 3,则执行的查询将是SELECT * FROM trytable WHERE name=3;
.
另请注意,如果查询rs.next()
返回true
任何结果,则返回,因此这将是确定记录是否存在的正确方法。
推荐阅读
- python - 为什么不需要重塑一维数组以适应具有多个变量的线性回归
- java - 按 HashMap 中的值对对象进行排序
- django - django-oauth-toolkit - 提供对特定模型的应用程序访问
- grafana - Grafana 和 InfluxDB 在 null 上显示最新值
- c# - 无法访问 ASP.net core 3.0 中的用户机密
- android - 我只想在数据库表发生更改时向用户发送 Firebase 通知
- variables - 初始化自定义类型不适用于 var 但适用于 :=
- selenium - 隐式等待和 AjaxElementLocatorFactory 有什么区别?
- python - 如何打印字典中的最高值
- ruby-on-rails - Rails ActiveRecord 查询按天排序