进程executeQuery()方法有多长?

时间:2017-11-03 09:02:09

标签: java oracle jdbc executequery

我在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);
    }

1 个答案:

答案 0 :(得分:0)

有一些像setFetchSize和autocommit / transactional模式的螺丝。 但是首先尝试运行具有更多内存的应用程序(java -Xmx = ...), 因为你正在做批量工作。

关于效率:

  • 声明尽可能接近第一次使用;循环内部不会改变 它的存储。
  • Vector是一个非常古老的类。使用(数组)列表。它更快。
  • 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系列的一个相当严格的约定。