Java 如何在mysql选择查询中使用textfield输入
我正在使用Java netbeans和mysql。我想检查用户在文本字段tf中输入的值是否已经存在于mysql表中Java 如何在mysql选择查询中使用textfield输入,java,mysql,database,Java,Mysql,Database,我正在使用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的代码中,我想给出用户
String query1="SELECT * FROM trytable WHERE name='8'";
ResultSet rs=stmt.executeQuery(query1);
if(rs.isBeforeFirst()==true){JOptionPane.showMessageDialog(null,"already");}
在上面代替8的代码中,我想给出用户在表单中输入的值,然后检查该值是否已经存在于表单中
请在第一行帮我。谢谢您应该使用
PreparedStatement
而不是常规语句。这比普通的语句
更安全,并允许您避免
您可以这样更改查询:
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*fromtrytable,其中name=3代码>
还请注意,如果查询返回任何结果,则rs.next()
将返回true
,因此这是确定记录是否存在的正确方法。ResultSet就像一个表,它有一个光标。开始时,光标位于第一行上方,因此isBeforeFirst()
将始终返回true
,即使ResultSet
中没有结果
为了检索结果,您需要将光标移动到下一行,为此,您可以使用
rs.next()
如果光标成功移动到下一行(这意味着有更多结果),它将返回true
,否则false
。因为你只需要第一个结果,你也可以使用
rs.first()
确认返回的ResultSet
中有可用数据
试试看
这是最终的代码,威尔的工作非常好
try{
Class.forName("com.mysql.jdbc.Driver");
Connection conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/mysql","root","");
String query = "SELECT * FROM table_name WHERE name=?;";
PreparedStatement preparedStatement = conn.prepareStatement(query);
preparedStatement.setString(1,jtf.getText());
ResultSet rs = preparedStatement.executeQuery();
if(rs.next()==true){
JOptionPane.showMessageDialog(null,"Value already exist");
}
else{
JOptionPane.showMessageDialog(null,"Value not present");
String query1="INSERT INTO table_name(col_name) VALUES (?)";
preparedStatement = conn.prepareStatement(query1);
preparedStatement.setString(1,jtf.getText());
preparedStatement.execute();
JOptionPane.showMessageDialog(null,"DONE");
}
rs.close();
preparedStatement.close();
}
catch(Exception e){
System.out.println("Exception:"+e.getMessage());
}
所以您有两个问题:如何在JavaNetBeans中声明变量,以及如何查询数据库?第二点,如果有人在检查的时候插入“8”,我试过了,但是还没有固定。请检查:Code:Error:@DhirendraSinghBisht哪个SQL语句出现了错误?@Zephyr感谢您的代码和解释对我帮助很大。感谢您的代码和解释对我帮助很大。@DhirendraSinghBisht我很高兴:)注意,它还将返回像“3alpha”@草莓这样的用户名-它将如何返回?我明白了。我假设name
将是integer
类型。可能是一个糟糕的假设,所以我更新了我的答案,加入了“
。谢谢:)嗯,你认为;-)但我认为这不是准备弦的正确方法
try{
Class.forName("com.mysql.jdbc.Driver");
Connection conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/mysql","root","");
String query = "SELECT * FROM table_name WHERE name=?;";
PreparedStatement preparedStatement = conn.prepareStatement(query);
preparedStatement.setString(1,jtf.getText());
ResultSet rs = preparedStatement.executeQuery();
if(rs.next()==true){
JOptionPane.showMessageDialog(null,"Value already exist");
}
else{
JOptionPane.showMessageDialog(null,"Value not present");
String query1="INSERT INTO table_name(col_name) VALUES (?)";
preparedStatement = conn.prepareStatement(query1);
preparedStatement.setString(1,jtf.getText());
preparedStatement.execute();
JOptionPane.showMessageDialog(null,"DONE");
}
rs.close();
preparedStatement.close();
}
catch(Exception e){
System.out.println("Exception:"+e.getMessage());
}