我正在编写一个java程序,我有一个当前输出错误的SQL语句: 所以代码是:
spring-boot-starter-web
,输出为:
String sql = "SELECT Name from Users WHERE Name LIKE "+t;
但我需要用单引号将其添加为:
SELECT Name from Users WHERE Name LIKE David
如何添加这些引号?
非常感谢您的帮助
答案 0 :(得分:4)
这是一个非常常见的错误。我猜你正在使用Statement类创建查询并执行它。
我想建议你使用准备好的陈述。它是您的问题,并可以帮助您解决更多问题。
PreparedStatement ps = yourconn.prepareStatement("select name from users where name like ?");
ps.setString(1,yoursearchedusername);
ResultSet rs = ps.executeQuery();
这会添加你的报价。此外,它将防止未来的SQL注入攻击。
您当前的查询还会导致您的实际查询出现问题。要么 ?或者任何其他sql外卡。准备好的语句避免了所有这些问题,并通过将SQL编译并存储在db层(如果已启用)来帮助提高性能
答案 1 :(得分:1)
使用预准备语句来阻止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);
}
请注意,不区分大小写的搜索是合适的。