一部のJava既存コードを変更しようとしていますが(私は実行していません)、prepareステートメントを使用してクエリが実行されていないことがわかりました。私はたくさんのコードを持っているので、できるだけ修正しようとはしていません。したがって、次のような方法を使用する代わりに
public void executeInsertStmt(String strQuery, String param1, String param2) {
...
...
PreparedStatement preparedStatement = cnx.prepareStatement(stringRequest);
preparedStatement.setString(1, param1);
preparedStatement.setString(2, param2);
}
私はそのようなことをしたいと思います(それが最善の解決策かどうかはわかりません)。
public void executeInsertStmt(String strQuery, ArrayList<ArrayList<Object>> parameters) {
PreparedStatement preparedStatement = cnx.prepareStatement(stringRequest);
int counter=1;
for (final ArrayList<Object> eachParam : parameters) {
switch(DataTypes.valueOf(eachParam.get(0).toString().toUpperCase()))
{
case STRING:
preparedStatement.setString(counter, (String)eachParam.get(1));
break;
case DATE:
preparedStatement.setDate(counter, (Date)eachParam.get(1));
break;
case INT:
preparedStatement.setInt(counter, (Integer)eachParam.get(1));
break;
default:
preparedStatement.setString(counter, (String)eachParam.get(1));
break;
}
counter++;
}
}
そして、このようなものを持つために:
strQuery = "insert into toto values (?,?)";
ArrayList<Object> paramToPass1 = new ArrayList<Object>();
paramToPass1.add("String");
paramToPass1.add("TheValueForTheString");
ArrayList<Object> paramToPass2 = new ArrayList<Object>();
paramToPass2.add("String");
paramToPass2.add("TheValueForTheString2");
ArrayList<ArrayList<Object>> paramToPass = new ArrayList<ArrayList<Object>>();
paramToPass.add(paramToPass1);
paramToPass.add(paramToPass2);
executeInsertStmt(strQuery,paramToPass);
パラメータの数が異なるクエリがたくさんあるので、この種のアプローチが最適です。クエリの種類ごとにメソッドを実行する必要はありません。
どう思いますか。
それについて何か問題がありますか?行くための最良の方法はありますか?
アイデアをありがとう。