我希望减少应用程序中的往返次数以提高性能。我想使用PreparedStatement
来获得众多好处。
这是我提出的一个例子......概括了详细信息......
Class.forName( "..Driver" );
Connection connection = DriverManager.getConnection( .. );
PreparedStatement statement = connection.prepareStatement( "UPDATE Table SET XmlData = ? WHERE SomeGUID = ?; INSERT INTO SomeTable ( Col1,Col2 ) VALUES ( ?, ? )" );
try{
statement.setString( 1, "<XmlData></XmlData>" );
statement.setString( 2, "32ABD5-438B0-.." );
statement.setString( 3, "ABC" );
statement.setString( 4, "XYZ" );
statement.execute();
connection.commit();
}
catch {
connection.rollback();
}
finally {
statement.close();
connection.close();
}
(同样,这不是实际的代码,只是一个简化的例子)
通常,我尝试在单个语句中执行多个insert / update语句以减少往返流量。这是一种有效的方法吗?还是有一种更为公认的方法?
我可以为一笔交易提供数千条报表。我可能会将语句分段为合理大小的块,以防止单个语句的执行超时。
我将支持多个数据库供应商,但将使用ANSI SQL,因此应该没有问题。如果需要,我可以利用我的DAL智能。所以,这不是问题。
任何提示/建议?
答案 0 :(得分:2)
以下是Oracle JDBC手册的一个示例。这被描述为“标准”(非Oracle特定)方法。
PreparedStatement pstmt =
conn.prepareStatement("INSERT INTO employees VALUES(?, ?)");
pstmt.setInt(1, 2000);
pstmt.setString(2, "Milo Mumford");
pstmt.addBatch();
pstmt.setInt(1, 3000);
pstmt.setString(2, "Sulu Simpson");
pstmt.addBatch();
...
int[] updateCounts = pstmt.executeBatch();
答案 1 :(得分:1)
答案 2 :(得分:0)
PreparedStatement
支持使用addBatch
和executebatch
批量提交具有不同参数的同一语句。我认为没有一种以跨数据库平台方式执行多个参数化语句的好方法。传统上,这将由[evil]存储过程处理。