JDBC笔记整理

来源:互联网 发布:小学语文课文配音软件 编辑:程序博客网 时间:2024/06/13 03:44


JDBC深入学习笔记

Jdbc:Java Database Connectivity(使用java操作数据库的标准接口,任何的java框架最终底层都是使用jdbc来操作数据库的,只是框架对jdbc有所封装)

 

JDBC的核心接口和类:(深入研究源码有助于我们得心应手的使用)

核心类:DriverManager

核心接口:ConnectionPreparedStatementResultSetStatement(几乎被代替了)

 

PreparedStatement接口:预处理机制,可以填充占位符。(非常重要的一个接口)

ResultSet接口:结果集接口,把它理解成结果集容器吧,有点集合容器中迭代器的感觉。

备注:preparedStatement填充占位符时候使用的是别名机制

 

Jdbc连接操作数据库的步骤:

1.加载驱动 Class来加载

2.创建Connection对象DriverManager来获得

3.获得预处理机制执行语句connection获得预处理机制

4.获得结果集(可选)预处理机制获得的

备注:由它们的步骤我们就可以看出,上一层都是依赖下一层的。

备注:数据的操作有两点要特别注意(事务、资源关闭)

 

举例:连接mysql的几个基本参数

DRIVER=com.mysql.jdbc.Driver

URL=jdbc:mysql:///dbname;   表示的是本机默认3306端口

USERNAME:admin

PASSWORD:admin

 

处理sql.Datejava.util.Date的转换

new Date(new Date().getTime());

第一个Datejava.sql里的Date

第二个Datejava.util里的Date

更标准的写法是:new java.sql.Date(new java.util.Date().getTime());

 

 

配置C3P0数据源

备注:http://www.mchange.com/projects/c3p0/#quickstart,有这个网址难道你还不会配置吗?好吧我来稍稍介绍一下

 

备注:其实它支持xml配置文件和java程序设置属性的方式(推荐使用xml配置文件,修改方便)

备注:src下建立一个c3p0-config.xml配置文件,默认就是使用c3p0-config.xml名字,里面的name属性随便改,我们使用的就是根据name属性来找的。

<c3p0-config>

  <named-config name="c3p0xml">

<!-- 指定连接数据源的基本属性 -->

<property name="user">root</property>

<property name="password">admin</property>

<property name="driverClass">com.mysql.jdbc.Driver</property>

<property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbc</property>

<!-- 若数据库中连接数不足时一次向数据库服务器申请多少个连接 -->

<property name="acquireIncrement">5</property>

<!-- 初始化数据库连接池时连接的数量 -->

<property name="initialPoolSize">5</property>

<!-- 数据库连接池中的最小的数据库连接数 -->

<property name="minPoolSize">5</property>

<!-- 数据库连接池中的最大的数据库连接数 -->

<property name="maxPoolSize">10</property>

<!-- C3P0 数据库连接池可以维护的 Statement 的个数 -->

<property name="maxStatements">20</property>

<!-- 每个连接同时可以使用的 Statement 对象的个数 -->

<property name="maxStatementsPerConnection">5</property>

</named-config>

</c3p0-config>

 

初始化获得数据源:

数据源只需要初始化一次就行了,所以将其初始化放入static代码块中

static{

dateSource=new CombopooledDataSource(配置文件名字);

}

备注:我们可以采用配置c3p0-config.xml配置文件来配置,数据源对象的setter方法来设置,当然数据源对象得是实现类的数据源对象(CombopooledDataSource的对象)。数据库连接池的Connection 对象的close()方法并不是真正的关闭资源,而是把数据库连接资源归还给数据库连接池。

 


使用JDBC插入记录的时候获得插入记录的主键


方式一:(直接使用预处理器 推荐使用)

preparedStatement=connection.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS;

//执行操作

preparedStatement.executeUpdate();

//获得自增主键的结果集

ResultSet resultSet=preparedStatement.getGeneratedKeys();

//如果知道插入记录只有一条的话

if(resultSet.next()){

Integer id=resultSet.getInt(1);

System.out.println("主键id: "+id);

}

//如果插入数据是多条记录的话

while(resultSet.next()){

Integer id=resultSet.getInt(1);

System.out.println("id "+id);

}

备注:通常情况下都是插入一条记录的

 

方式二:(使用静态的处理器 不推荐使用)

Statement statement=connection.createStatement();

statement.executeUpdate(sql, Statement.RETURN_GENERATED_KEYS);

//获得自增主键结果集

ResultSet resultSet=statement.getGeneratedKeys();

//如果知道插入记录只有一条的话

if(resultSet.next()){

Integer id=resultSet.getInt(1);

System.out.println("主键id: "+id);

}

//如果插入数据是多条记录的话

while(resultSet.next()){

Integer id=resultSet.getInt(1);

System.out.println("id "+id);

}

备注:不管使用那种方式都需要获得对应的结果集,还要使用Statement.RETURN_GENERATED_KEYS;


 

DbUtilsBeanUtils小工具类

备注:深入它们的源码分析,对自己能力的提高非常有帮助

 

DbUtils:

1.QueryRunner(最为核心的类,是一个线程安全的类,最常用的方法就是query)

2.BeanHandlerBeanListHandlerScalarHandler(各种结果处理类)

这两个核心类一定要深入源码分析,其实看完源码之后就会发现,原来还是反射啊。

备注:当然是看api了或导入src源码分析

 

 

BeanUtils:

1.直接使用它静态方法,它的出现就是为了方便操作javabean.

备注:直接关注核心几个静态方法

 

 

 还没有完全结束,如果自己能够使用ResultSetMetaData结合反射自己来完成通用的DAO那么JDBC你就没有问题了。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


0 0