为了账号安全,请及时绑定邮箱和手机立即绑定

如何在mysql SELECT查询中使用文本字段输入

如何在mysql SELECT查询中使用文本字段输入

慕娘9325324 2021-06-11 18:08:28
我正在使用 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 的代码中,我想给出用户在表单中输入的值,然后检查该值是否已存在于表单中。请在第一行帮助我。谢谢
查看完整描述

3 回答

?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

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


查看完整回答
反对 回复 2021-06-17
?
郎朗坤

TA贡献1921条经验 获得超9个赞

ResultSet 就像一个表,它有一个游标。在开始时光标在第一行的上述所以isBeforeFirst()总是会返回true甚至没有结果的ResultSet。


为了检索结果,您需要将光标移动到下一行,为此您可以使用,


rs.next()

如果光标成功移动到下一行(这意味着有更多结果),true否则将返回false。由于您只需要第一个结果,您也可以使用,


rs.first()

确认返回的ResultSet.


尝试,


if (rs.first()) {

  JOptionPane.showMessageDialog(null, "already");

}


查看完整回答
反对 回复 2021-06-17
?
隔江千里

TA贡献1906条经验 获得超10个赞

这是最终的代码将完全正常工作。


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());

                }


查看完整回答
反对 回复 2021-06-17
  • 3 回答
  • 0 关注
  • 183 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信