您的位置:首页 > 其它

JDBC笔记整理

2014-08-24 23:41 155 查看


JDBC深入学习笔记

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

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

核心类:DriverManager

核心接口:Connection、PreparedStatement、ResultSet、Statement(几乎被代替了)

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.Date和java.util.Date的转换

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

第一个Date是java.sql里的Date

第二个Date是java.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;

DbUtils、BeanUtils小工具类

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

DbUtils:

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

2.BeanHandler、BeanListHandler、ScalarHandler(各种结果处理类)
这两个核心类一定要深入源码分析,其实看完源码之后就会发现,原来还是反射啊。
备注:当然是看api了或导入src源码分析

BeanUtils:

1.直接使用它静态方法,它的出现就是为了方便操作javabean.
备注:直接关注核心几个静态方法

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


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: