3 回答
![?](http://img1.sycdn.imooc.com/54584de700017cbd02200220-100-100.jpg)
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,如果该查询返回任何结果,所以这将是正确的方法,以确定是否存在记录。
![?](http://img1.sycdn.imooc.com/533e4c3300019caf02000200-100-100.jpg)
TA贡献1921条经验 获得超9个赞
ResultSet 就像一个表,它有一个游标。在开始时光标在第一行的上述所以isBeforeFirst()总是会返回true甚至没有结果的ResultSet。
为了检索结果,您需要将光标移动到下一行,为此您可以使用,
rs.next()
如果光标成功移动到下一行(这意味着有更多结果),true否则将返回false。由于您只需要第一个结果,您也可以使用,
rs.first()
确认返回的ResultSet.
尝试,
if (rs.first()) {
JOptionPane.showMessageDialog(null, "already");
}
![?](http://img1.sycdn.imooc.com/54584ee0000179f302200220-100-100.jpg)
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());
}
添加回答
举报