大家好,我正在尝试在Java中创建这个搜索栏,但当我搜索时没有输入双引号,我得到这个错误
搜索错误图像
但是当我输入数字或者双引号的单词时,它会正常工作
搜索双引号图像
这是我的代码
代码图像
private void jButton_Show1ActionPerformed(java.awt.event.ActionEvent evt) {
try{
String Accounts_Choose_Value = jTextField1.getText();
// Accounts_Choose_Value = (String) Accounts_jComboBox_Choose_Value.getSelectedItem();
if(Accounts_Choose_Value.equals(Accounts_Choose_Value)){
String sql = "SELECT * FROM accounts WHERE URL="+Accounts_Choose_Value;
con= DriverManager.getConnection("jdbc:mysql://localhost/accountmanagerdb","root","");
Statement s = con.prepareStatement(sql);
ResultSet rs =s.executeQuery(sql);
if(rs.next()){
String Account_User_Name =rs.getString(2);
String Account_Email =rs.getString(3);
String Account_Password =rs.getString(4);
String Account_Backup_Codes =rs.getString(5);
jLabel_Account_User_Name.setText(Account_User_Name);
jLabel_Account_Email.setText(Account_Email);
jLabel_Account_Password.setText(Account_Password);
jLabel_Account_Backup_Codes.setText(Account_Backup_Codes);
}
}
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, ex,
"Database",JOptionPane.ERROR_MESSAGE);
}
}
我没有在textfield中写任何东西
private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}
修改这一行,但要注意SQL注入
String sql = "SELECT * FROM accounts WHERE URL=""+Accounts_Choose_Value+""";
基本上,你需要将where子句条目用双引号括起来,你的第一个查询生成
SELECT * FROM accounts WHERE URL=google
也就是说你要给出列值URL
等于google
的所有行
正确的查询是
SELECT * FROM accounts WHERE URL="google"
现在你要求给出URL等于"google"的所有行字符串
在第一种情况下,你的代码失败了,说我找不到一个名为google
的列编辑
基本上你不应该直接字符串插入你的变量,这会导致安全问题
你可以参考如何在这里做预处理语句
Java -转义字符串防止SQL注入