我在Oracle中有新的简单SELECT查询。
如果我在SQL工具上运行,则需要1~3秒。
但是在java jdbc上使用executeQuery()方法,需要30~40秒
为什么需要这么长时间?我考虑解决这个问题?
请帮助新手
我只是上传我的java源代码 但无法查询上传 上传太长了
pstmt = con.prepareStatement(Query);
pstmt.setString(1, model.B_BasicDate);
pstmt.setString(2, GL_bfMonth);
pstmt.setString(3, GL_bfDay);
**rs = new DmdResultSet(pstmt.executeQuery()); // it takes 35 seconds**
int colCount = rs.getColumnCount();
Vector innV = null;
while(rs.next()) {
innV = new Vector();
for (int i = 1 ; i <= colCount; i++) {
innV.addElement(rs.getString(i)) ;
}
outV.addElement(innV);
}
答案 0 :(得分:0)
有一些像setFetchSize
和autocommit / transactional模式的螺丝。
但是首先尝试运行具有更多内存的应用程序(java -Xmx = ...),
因为你正在做批量工作。
关于效率:
SELECT many fields
效率低下,特别是对于CLOB等。所以:
// The normal I use, but there are faster ones
connection.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
connection.setReadOnly(true);
List<List<String>> outV = new ArrayList<>();
while (rs.next()) {
List<String> innV = new ArrayList<>(colCount);
for (int i = 1 ; i <= colCount; i++) {
innV.add(rs.getString(i)) ;
}
outV.add(innV);
}
顺便说一句,变量和字段名称应该以小写字母开头并且是camelCase,没有下划线。这是java系列的一个相当严格的约定。