JDBC提供了getString()、getInt()、getData()等方法从ResultSet中获取数据。
当查询结果集中的数据量较小时,不用考虑性能,使用这些方法完全能够满足需求,但是当查询结果集中的数据量非常大时,则会抛出异常:OrcelException为处理:ORA-01000:maximum open cursors exceedde(以Orcel数据库为例)。而通常情况下,使用getObject()方法就可以解决这个问题。
getString()或getInt()等方法在被调用时,程序会一次性地把数据都放到内存中,然后通过调用ResultSet的next()和getString()等方法来获取数据。
当数据量大到内存中放不下时就会抛出异常,而使用getObject()方法就不会出现这种问题,因为数据不会一次性被读到内存中,每次调用时会直接从数据库中去获取数据,因此使用这种方法不会因为数据量过大而出错。
使用JDBC需注意的问题:
在使用JDBC编程是,首先需要建立数据库的连接,才能完成对数据库的访问,由于与数据库的连接是非常重要的资源。JDBC连接池提供了JDBC连接定义和数目有限的连接,如果连接数量不够,就需要长时间等待。不正常关闭JDBC连接会导致等待回收无效的JDBC连接。只要正常的关闭和释放JDBC连接,JDBC资源才可以被快速地重用,从而使得系统性能得到改善。
一般来讲,在使用JDBC访问数据库是,createStatement和prepartStatement最好放在循环外面,而且使用了这些Statement后需要及时关闭。最好是在执行了一次executeQuery、executeUpdate等之后,如果不需要使用结果集(ResultSet)的数据,就马上将Statement关闭。因为每次执行conn.createStatement()或conn.prepareStatement(),实际上都相当于在数据库中打开了一个cursor(游标),如果把对这两个方法调用放到循环内,会一直不停地打开cursor。如果不能及时地关闭,会导致出现抛出异常。