如何在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 的代码中,我想给出用户在表单中输入的值,然后检查该值是否已存在于表单中。


请在第一行帮助我。谢谢


慕娘9325324
浏览 184回答 3
3回答

白猪掌柜的

您应该使用 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,如果该查询返回任何结果,所以这将是正确的方法,以确定是否存在记录。

郎朗坤

ResultSet 就像一个表,它有一个游标。在开始时光标在第一行的上述所以isBeforeFirst()总是会返回true甚至没有结果的ResultSet。为了检索结果,您需要将光标移动到下一行,为此您可以使用,rs.next()如果光标成功移动到下一行(这意味着有更多结果),true否则将返回false。由于您只需要第一个结果,您也可以使用,rs.first()确认返回的ResultSet.尝试,if (rs.first()) {  JOptionPane.showMessageDialog(null, "already");}

隔江千里

这是最终的代码将完全正常工作。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());                }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java