“最开始觉得都是真的,慢慢觉得都是假的,然后再开始发现有真有假,最后无所谓真假。”

                                                                                                                                                                               ——向往的生活

 1.什么是JDBC?

JDBC是(Java Data Base Connectivity)即java数据库连接。

JDBC是一种执行SQL语句的java API,是java访问数据库的桥梁,它可以为多种关系型数据库提供统一的访问接口。 

2.既然说JDBC是API,那它的常用接口有哪些呢?

JDBC常用API主要位于Java.sql包中,该包定义了一系列访问数据库的接口和类。所以JDBC是不需要额外导入单独的jar包的,它包含再java API里,但是具体的数据库驱动是需要导的,因为不同的数据库厂家,用的不同的jar包,加载的驱动也不一样。

(1)Driver接口

driver接口是所有jdbc驱动程序必须实现的接口,该接口专门提供给数据库厂商使用。即导入的数据库jar包中的驱动类是实现了Driver的(比如说oracle的驱动类:oracle.jdbc.driver.OracleDriver)。

(2)DriverManager类

DriverManger类用于加载jdbc驱动并且创建与数据库的连接。

(3)Connection接口

(4)Statement接口

(5)PreparedStatement接口

(6)ResultSet接口

3.JDBC连接数据库的步骤?

(1).加载数据库驱动

(2).连接数据库

(3).建立数据库连接

(4).准备sql语句

(5).填充sql语句

(6).分析结果集

(7).释放资源

4.释放资源的顺序?

先关闭ResultSet,然后是Statement,最后是Connetion,刚好与创建相应对象时的顺序相反。

5.超出打开游标最大数ORA-01000?

Java代码在执行conn.createStatement()和conn.prepareStatement()的时候,实际上都是相当与在数据库中打开了一个cursor。尤其是,如果你的createStatement和prepareStatement是在一个循环里面的话,就会非常容易出现这个问题。因为游标一直在不停的打开,而且没有关闭。  

6.注意事项?

PreparedStatement批量执行方式占用内存有可能非常大(跟批量数据量有关系),如果只是使用close,包括connection的close,并不能及时释放,哪怕是强制gc也不能释放。

使用addBatch()缓存数据时要在循环中设置条件,当循环达到指定次数后执行executeBatch(),将缓存中的sql全部发给数据库,然后执行clearBatch()清楚缓存,否则数据过大是会出现OutOfMemory(内存不足)。

7.批处理?

executeQuery()是专门用来查询语句SELECT语句的;

而addBatch()和executeUpdate()是用来执行数据插入或更新的,不同就是一个批量,一个单个插入。这两个不要一起使用,那样addBatch()就和没写一样。

addBatch()是用来缓存数据的,将多条sql语句缓存起来,再通过executeBatch()方法一次性发给数据库,大大提高执行效率。executeUpdate()注重的及时性,每写一条sql语句就发送给数据库保存起来,没有缓存,这样频繁操作数据库效率非常低。

java cursor游标对象使用 jdbctemplate 游标_内存溢出

喝了个下午茶,现在才回,明天要上班,哎,有点乱,暂存,下次修改。