JDBC补充注意点
@author ixenos
1.一个Statement对象可以用于多个不相关的命令和查询,但是一个Statement对象最多只能有一个打开的结果集,如果需要同时执行多个查询同时分析查询结果,那么必须创建多个Statement对象
a) 然而!如果真的需要并发查询分析结果,我们更应该从数据库层面的组合查询去解决,而不是java层面的算法,因为前者只需要分析一个结果
2.使用完ResultSet、Statement、Connection对象后,应立即调用close方法,因为这些对象都使用了规模较大的数据结构和数据库服务器上的有限资源(socket、io等)
3.如果Statement对象上有一个打开的结果集,那么调用close方法将自动关闭该结果,而调用Connection对象的close方法将关闭该连接上的所有语句
4.在JavaSE7以上,在Statement上调用closeOnCompletion方法,在其所有结果集都被关闭后,该Statement语句会自动关闭!也就是在finally中只需关闭ResultSet和Connection,这种情况下Statement在ResultSet关闭后可以自动关闭
5.预编译语句 参数的set填入和 结果集 结果的get选择类似,前一个参数为宿主变量的位置:prestmt.setString(1, publisher);
6.获取自动生成键(行自动计数)
1)大多数数据库支持行自动计数的机制(实现上有差异性),这些自动计数的值常被用作主键;
2)JDBC没有提供自动生成键的接口,但提供了获取自动生成键的有效途径:
当我们插入一个新行,且其键已经自动生成时,可用下面的代码来获取这个键:
stmt.executeUpdate(insertStatement, Statement.RETURN_GENERATED_KEYS); ResultSet rs = stmt.getGeneratedKeys(); if(rs.next()){ int key = rs.getInt(1); ... }