java - 如何动态设置SQL准备语句的参数

标签 java prepared-statement

我有 3 个字段,用户可以选择在其中输入值。他必须至少输入一个值,系统才能返回任何内容。

我需要根据用户输入值的框之一动态构建我的 WHERE 子句。

我在设置参数值时遇到困难。

这是我到目前为止所拥有的:

StringBuilder queryStr = new StringBuilder();
Object param[];
int paramCount = 0;
Database db = (Database) ssb.getObject("db");

queryStr.append("SELECT * FROM tblData ");
queryStr.append("WHERE deleted != 1 ");

if(!field1.equals("")){
    queryStr.append("AND field1 = ? ");
    paramCount++;
}
if(!field2.equals("")){
    queryStr.append("AND field2 = ? ");
    paramCount++;
}
if(!field3.equals("")){
    queryStr.append("AND field3 = ? ");
    paramCount++;
}
param = new Object[paramCount];

for (int i=0; i <= paramCount; ++i)
     param[i] = field1; <-- ????

db.queryPS(queryString.toString(), param);

最佳答案

创建非空字段的列表

StringBuilder queryStr = new StringBuilder();
List<String> param = new ArrayList<>();
Database db = (Database) ssb.getObject("db");

queryStr.append("SELECT * FROM tblData ");
queryStr.append("WHERE deleted != 1 ");

String[] fields = { field1, field2, field3 };
for (int i = 0; i < fields.length; i++) {
    if (!fields[i].isEmpty()) {
        queryStr.append("AND field" + (i + 1) + " = ? ");
        param.add(fields[i]);
    }
}

db.queryPS(queryString.toString(), param.toArray());

关于java - 如何动态设置SQL准备语句的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38512078/

相关文章:

mysql - 存储过程中 'where clause' 中的未知列

jdbc - 如何构建一个带有可变数量参数的准备好的语句?

java - 是否可以在 JTable 上使用 JPanel

java - 使用从 Activity 传递的数据更新 Fragment UI

java - org.apache.coyote.http11.Http11Processor.service 解析 HTTP 请求 header 时出错

php - 查询正常工作但在准备好的语句中不工作

php - 使用 PHP 在一个查询 MySQL 中插入数千行

java - 内存中会创建多少个字符串对象?

java - Android,UnknownHostException : www. google.com,在设备上,而不是模拟器上

php - 关闭准备好的语句