我想修改一些Java現有代碼(不是由我完成的),並且我發現查詢沒有使用prepare語句完成。 因爲我有很多代碼,我試圖儘可能少地修改它。 因此,而不是具有類似於準備語句:使用ArrayList的參數創建方法
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);
因爲我有不同數量的參數很多查詢這種形式給出的將是最適合我。 我不必爲每種類型的查詢做一個方法。
您怎麼看。
這是錯的嗎? 是最好的方式去?
謝謝你的任何想法。
我做了類似的,但有兩個方法,1收到一個'List
如果你被允許使用Spring JDBC,那將大大簡化很多這些。 – GriffeyDog 2012-04-12 14:35:54
如果你還有很多工作要做,爲什麼不逐步轉向更高層次的解決方案,即使用[jOOQ](http://www.jooq.org),[DbUtils](http:// commons。 apache.org/dbutils/),[spring-data](http://www.springsource.org/spring-data),[Hibernate](http://www.hibernate.org/)等等。認爲你不應該花太多的時間來改善一些事情(可能會讓它們變得更糟) – 2012-04-12 14:56:31