优化下面的代码,以便在花费更多时间时不执行查询

时间:2013-06-20 14:02:18

标签: java jdbc

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

Statement.execute()方法允许我们执行任何类型的查询,如select,update。它返回布尔值。如果返回值为true,则执行select查询,获取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分钟

请告知如何实现

1 个答案:

答案 0 :(得分: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");