我通过jdbc建立了一个数据库连接,但是我有多个sql语句我想问一下,我如何使用一个数据库连接,多次执行不同sql。如下的方法,是不是太笨了。
每个连接能够开多个statement吗?效率会不会有影响?谢谢
                 java.sql.DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
      java.sql.Connection conn=DriverManager.getConnection(url,user,password);
      java.sql.Statement stmt1=conn.createStatement();
      java.sql.ResultSet rs=stmt.executeQuery(sql1);       java.sql.Statement stmt2=conn.createStatement();
      java.sql.ResultSet rs=stmt2.executeQuery(sql2);       java.sql.Statement stmt3=conn.createStatement();
      java.sql.ResultSet rs=stmt3.executeQuery(sql3);       java.sql.Statement stmt4=conn.createStatement();
      java.sql.ResultSet rs=stmt4.executeQuery(sql4);

解决方案 »

  1.   

    java.sql.Statement stmt1=conn.createStatement(); 
    java.sql.ResultSet rs1=stmt.executeQuery(sql1); 
    java.sql.ResultSet rs2=stmt.executeQuery(sql2); 
    java.sql.ResultSet rs3=stmt.executeQuery(sql3); 
    java.sql.ResultSet rs4=stmt.executeQuery(sql4); 这样不可以吗?
    如果sql语句很多的话建议执行完一次就关闭Statement,然后再打开,
    不然非常消耗内存的。
    每个连接可以开多个statement,效率没有影响,但是内存会被吃掉的,很快很快
      

  2.   


    这样有问题,因为一个Statement同时只能保持一个ResultSet,也就是说,
    当执行第二个executeQuery的同时,第一个resultSet就被关闭。如果只是顺序处理(检索,使用结果集,关闭结果集,再检索)则没问题,
    但如果想同时打开几个结果集,互相对照着处理,则这种方式不行。
    ----------再回答楼主的问题:
    如果你的需求是这样的(同时打开多个结果集)则你的处理方法很好没有问题。
      

  3.   

    一个连接使用多次是可以,但是要注意:1、不可以多个线程同时使用,也就是说一个连接同一时间只能执行一个动作;
    2、每次执行完毕后必须回收资源,即关闭 Statement 和 ResultSet。
      

  4.   

    开多个Statement还不如用Batch来批量开多个的管理是很有问题的!
      

  5.   


    你说得太对了,statement只能保存一个结果集。我现在就需要用到每个结果集合。
    谢谢你!
      

  6.   

    不能用多个STATEMENT!
    用存储过程!!
      

  7.   

    每个连接能够开多个statement吗?效率会不会有影响?
          用ThreadLocal<Statement>最好
      

  8.   

       一个线程一个Statement,就好比你建了个Statement池