有一段时间了。我目前正在努力优化我的应用程序的性能。这是一个与我目前所拥有的类似的代码片段。
使用此查询的存储过程:
SELECT field_a, field_b, field_c
FROM table_a
WHERE field_a = param_a
AND field_b = param_b;在Java语言中,我将这个SampleParameterClass的ArrayList的paramA和paramB属性声明为String。
ArrayList<SampleParameterClass> sampleParams = new ArrayList<SampleParameterClass>();
sampleParams.add(new SampleParameterClass(stringValueForParamA, stringValueForParamB);让我们假设sampleParams由数百个元素填充。
try
{
conn = ConnectionPool.getConnection();
con.setAutoCommit(false);
CallableStatement myProcedure = connection.prepareCall("{ ? = call my_proc_name(?, ?) }");
for(int paramCounter = 0; paramCounter < sampleParams.size(); paramCounter ++){
myProcedure.registerOutParameter(1, Types.OTHER);
myProcedure.setObject(2, sampleParams.get(paramCounter).getParamA);
myProcedure.setObject(3, sampleParams.get(paramCounter).getParamB);
myProcedure.execute();
ResultSet rs = (ResultSet) myProcedure.getObject(1);
while (rs.next()) {
String resultA = rs.getString("param_a");
String resultB = rs.getString("param_b");
String resultC = rs.getString("param_c");
myArrayListOfResult.add(new Result(resultA, resultB, resultC);
}
}
}
catch (SQLException e) {
myProcedure.close();
conn.close();
}
}基本上,上面的代码所做的就是遍历ArrayList中的所有参数,并为每个参数调用存储过程。如果我有成千上万的数据要处理,它会像蜗牛一样慢,不是吗?
我的问题是:
1)即使队列中有数千个参数,是否可以只调用该过程一次?类似于传递参数的整个ArrayList。
2)如果上面的问题无法回答,有什么方法可以最小化这个过程吗?
注意:
有关包含INSERT语句的过程的-Same问题。
如果我遗漏了什么,-I还没有找到类似的问题。请务必发布该问题的URL,我会将其标记为此问题的答案。
-I还没有找到类似于在过程中传递列表的阅读材料。
谢谢,任何回答都非常感谢。
发布于 2013-05-14 15:54:41
为什么不将参数作为分隔字符串传递,然后在PostgreSQL端使用string_to_array( text,text,text)将字符串转换为数组。
请参阅http://www.postgresql.org/docs/9.1/static/functions-array.html
和
https://stackoverflow.com/questions/16536821
复制相似问题