-1

我有下面的代码,它是一个简单的 jdbc java 程序,它在执行查询时获取结果并检索结果并将它们进一步存储在结果集中

Statement.execute() 方法允许我们执行任何类型的查询,例如选择、更新。它返回布尔值。如果返回值为真,则执行选择查询,获取 ResultSet 对象并读取结果记录。如果返回false,则可以更新查询,调用getUpdateCount()方法获取更新的总记录数

public static void main(String a[]){

        Connection con = null;
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
            con = DriverManager.
                    getConnection("jdbc:oracle:thin:@<hostname>:<port num>:<DB name>"
                        ,"user","password");
            Statement stmt = con.createStatement();
            //The query can be update query or can be select query
            String query = "select * from emp";
            boolean status = stmt.execute(query);
            if(status){
                //query is a select query.
                ResultSet rs = stmt.getResultSet();
                while(rs.next()){
                    System.out.println(rs.getString(1));
                }
                rs.close();
            } else {
                //query can be update or any query apart from select query
                int count = stmt.getUpdateCount();
                System.out.println("Total records updated: "+count);
            }
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally{
            try{
                if(con != null) con.close();
            } catch (Exception ex){}
        }
    }

现在我的查询是我必须以这样的方式优化这个程序

1)它应该打印查询在运行时执行所花费的时间

2)需要以这种方式添加条件......如果查询时间超过 1 分钟,那么它应该在那个时候停止意味着应该有一些计数器来跟踪它不应该超过 1 的时间分钟

请告知如何实现

4

1 回答 1

3
  • 记录System.currentTimeMillis()(以毫秒为单位返回当前时间)作为执行查询之前的最后一件事。返回后立即减去execute()
  • 并且,用于Statement.setQueryTimeout(int seconds)将您的超时值指定为

    stmt.setQueryTimeout(60);
    
    long start = System.currentTimeMillis();
    boolean status = stmt.execute(query);
    System.out.println("Took " + (start - System.currentTimeMillis()) + " ms");
    
于 2013-06-20T14:07:07.210 回答