java中的SQL返回错误的数据

时间:2018-03-19 14:57:06

标签: java sql jdbc

我有一个像下面这样的java方法:

public String qE (String query, String selector) throws QSLException,    IOException{

//I get my sqlQuery from properties
String sqlQuery = properties.getPRoperty(query);
//sqlQuery = SELECT count(?) FROM employees WHERE ? is not null

PreparedStatement ps = conn.preparedStatement(sqlQuery);
ps.setFetchSize(100);
ps.setString(1,selector);
ps.setString(2,selector);

ResultSet rs = ps.executeQuery();

String rs = "";

while(rs.next()){
queryValue = rs.getString(1);
}

return queryValue;
}

当我用参数运行它时     qe(employees,second_name) 然后应执行此查询:

SELECT count(second_name)
FROM employees
WHERE second_name is not null

问题是没有员工有第二个名字,我应该得到0,整个方法应该返回0,但我总是得到大于零的不同数字。

有谁可以告诉我为什么这不会返回0但总是不同的数字,例如2399?

1 个答案:

答案 0 :(得分:8)

?代表而非对象名称,因此相当于使用

SELECT count('second_name')
FROM employees
WHERE 'second_name' is not null

始终为真始终计算。换句话说,您的查询会计算表employees中的所有行。

您不能使用参数来参数化对象名称。如果您确实需要动态执行此操作,则需要动态构造查询(通过在查询字符串中连接名称)。如果你这样做,请务必保护自己免受SQL注入(例如,通过在白名单中检查名称或明确地与数据库元数据进行比较)。