SQL语句没有添加单引号('')

问题描述 投票:0回答:2

我正在写一个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'

我该如何添加这些报价?

非常感谢您的帮助

java mysql sql
2个回答
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
投票

使用预准备语句来阻止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);
}

请注意,不区分大小写的搜索是合适的。

© www.soinside.com 2019 - 2024. All rights reserved.