2016-07-21 3 views
0

ユーザーが値を入力できるフィールドは3つあります。彼はシステムが何かを返すために少なくとも1つの値を入力しなければならない。SQLプリペアドステートメントのパラメータを動的に設定する方法

私は、ユーザが入力したボックスのどれに基づいて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); 

答えて

1

が空でないフィールドのListを作成します。

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()); 
0

恐ろしい入力@ 4castle。お返事いただきありがとうございます。

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

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

if(!field1.equals("")){ 
    queryStr.append("AND field1 = ? "); 
    parameterValues.add(field1); 
} 
if(!field2.equals("")){ 
    queryStr.append("AND field2 = ? "); 
    parameterValues.add(field2); 
} 
if(!field3.equals("")){ 
    queryStr.append("AND field3 = ? "); 
    parameterValues.add(field3); 
} 

db.queryPS(queryString.toString(), parameterValues.toArray()); 
関連する問題