我通过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);
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,效率没有影响,但是内存会被吃掉的,很快很快
这样有问题,因为一个Statement同时只能保持一个ResultSet,也就是说,
当执行第二个executeQuery的同时,第一个resultSet就被关闭。如果只是顺序处理(检索,使用结果集,关闭结果集,再检索)则没问题,
但如果想同时打开几个结果集,互相对照着处理,则这种方式不行。
----------再回答楼主的问题:
如果你的需求是这样的(同时打开多个结果集)则你的处理方法很好没有问题。
2、每次执行完毕后必须回收资源,即关闭 Statement 和 ResultSet。
你说得太对了,statement只能保存一个结果集。我现在就需要用到每个结果集合。
谢谢你!
用存储过程!!
用ThreadLocal<Statement>最好