如何在不输入双引号的情况下制作搜索栏?
Posted
技术标签:
【中文标题】如何在不输入双引号的情况下制作搜索栏?【英文标题】:how to make search bar without having to type double quotation? 【发布时间】:2021-02-13 02:32:37 【问题描述】:大家好,我正在尝试在 java 中创建这个搜索栏,但是当我在不输入双引号的情况下进行搜索时,我得到了这个错误
search error image
但是当我输入带有双引号的数字或单词时,它工作得很好
searching with double quotation image
这是我的代码
Code image
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);
在文本字段中没有写任何东西
private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt)
// TODO add your handling code here:
【问题讨论】:
【参考方案1】:改这一行但要小心SQL injection
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 - escape string to prevent SQL injection
【讨论】:
不要那样做!阅读有关 SQL 注入的信息,然后开始为此使用 PreparedStatement。 但是请使用绑定变量,否则会导致SQL注入。 @Axel 用警告更新了答案,我的错我应该小心我的答案 谁能解释一下如何在我的代码中防止sql注入 @Yahya:很简单。永远不要将来自用户输入的 SQL 查询放在一起。创建一个 PreparedStatement,然后使用 setXXX 方法设置参数值。有关可能出错的示例,请参阅此answer 到另一个问题。在 Baeldung 的 article 中阅读有关 PreparedStaement 的更多信息。以上是关于如何在不输入双引号的情况下制作搜索栏?的主要内容,如果未能解决你的问题,请参考以下文章