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,如果該查詢返回任何結果,所以這將是正確的方法,以確定是否存在記錄。

TA貢獻1921條經驗 獲得超9個贊
ResultSet 就像一個表,它有一個游標。在開始時光標在第一行的上述所以isBeforeFirst()總是會返回true甚至沒有結果的ResultSet。
為了檢索結果,您需要將光標移動到下一行,為此您可以使用,
rs.next()
如果光標成功移動到下一行(這意味著有更多結果),true否則將返回false。由于您只需要第一個結果,您也可以使用,
rs.first()
確認返回的ResultSet.
嘗試,
if (rs.first()) {
JOptionPane.showMessageDialog(null, "already");
}

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());
}
添加回答
舉報