我正在尝试修改一些 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);
因为我有许多具有不同数量参数的查询,这种方法对我来说是最好的。我不必为每种类型的查询做一个方法。
你觉得怎么样。
有什么不对吗?是最好的方法吗?
感谢您的任何想法。