2016-04-14 4 views
0

私は文字列配列をPreparedStatementに渡します。私は、MySQL、JSPやストアドプロシージャを使用していますが、それはデータベースからデータをフェッチされていません。私は文字列配列をPreparedStatementに渡しています。私はmysql、jsp、ストアドプロシージャを使用しています。

String searchbycategory[] = request.getParameterValues("category"); 

StringBuilder sb= new StringBuilder(); 
String filter = ""; 

for(int i = 0; i < searchbycategory.length; i++) { 
    sb.append("'"+searchbycategory[i]+"',"); 
} 

filter = sb.toString(); 
filter = filter.substring(0, filter.length()-1); 

PreparedStatement pstmt = con.prepareStatement("{call some(?)}"); 
pstmt.setString(1, filter); 

ResultSet resultset = pstmt.executeQuery(); 

答えて

0

searchbycategoryの長さが1の場合、期待どおりにプログラムが動作するはずです。 問題は、入力文字列を1つに結合することです。

searchbycategoryは、PrepareStatementの1つのパラメータにマッピングする必要があります。例:

String searchbycategory[] = request.getParameterValues("category"); 
    StringBuilder sb = new StringBuilder().append("select col_name from table_name where category in ("); 
    for (int i = 0; i < searchbycategory.length; i++) { 
     sb.append("?,"); 
    } 
    sb.setCharAt(sb.length()-1,')'); 
    PreparedStatement pstmt = con.prepareStatement(sb.toString()); 
    for (int i = 0; i < searchbycategory.length; i++) { 
     pstmt.setString(i+1, searchbycategory[i]); 
    } 
    ResultSet resultset = pstmt.executeQuery(); 
関連する問題