我正在写一个java程序,我有一个SQL语句,当前输出错误:所以代码是:
String sql = "SELECT Name from Users WHERE Name LIKE "+t;
输出是:
SELECT Name from Users WHERE Name LIKE David
但我需要它与单引号如何添加如下:
SELECT Name from Users WHERE Name LIKE 'David'
我该如何添加这些报价?
非常感谢您的帮助
这是一个非常常见的错误。我猜你正在使用Statement类来创建你的查询并执行它。
我想建议你使用准备好的陈述。这将是您的问题,并帮助您解决更多问题。
PreparedStatement ps = yourconn.prepareStatement("select name from users where name like ?");
ps.setString(1,yoursearchedusername);
ResultSet rs = ps.executeQuery();
这将添加您的报价。此外,它将防止未来的SQL注入攻击。
您当前的查询还会导致您的实际查询问题有'或?或者任何其他sql外卡。准备好的语句避免了所有这些问题,并通过将SQL编译并存储在db层(如果已启用)来帮助提高性能
使用预准备语句来阻止sql注入。
String searchedName = "cdaiga";
String sql = "SELECT Name from Users WHERE UPPER(Name) LIKE '%?%'";
PreparedStatement preparedStatement = dbConnection.prepareStatement(sql);
preparedStatement.setString(1, (searchedName!=null? searchedName.toUpper(): ""));
// execute the SQL stetement
preparedStatement .executeUpdate();
ResultSet rs = preparedStatement.executeQuery();
// print the results if any is returned
while (rs.next()) {
String name= rs.getString("Name");
System.out.println("name: " + name);
}
请注意,不区分大小写的搜索是合适的。