gpt4 book ai didi

java - java中的SQL返回错误的数据

转载 作者:搜寻专家 更新时间:2023-11-01 01:40:10 25 4
gpt4 key购买 nike

我有一个像下面这样的 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(员工,second_name)那么应该执行这个查询:

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

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

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

最佳答案

A ? 代表一个而不是一个对象名,所以它等同于使用

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

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

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

关于java - java中的SQL返回错误的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49365936/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com