JDBC学习笔记

1.driver:driver是一个接口,所有的数据库厂商必须实现的一个接口,只有实现该接口才能连接数据库。
2.DriverManager:数据库驱动的管理类,通过重载getConnection()获得数据库的连接,可以管理多个数据库连接。
3.连接数据库的四个步骤:(1)准备连接数据库的四个参数(user,password,URL,Driver),其中可以把这四个参数存放到一个配置文件中,通过io流的方式获取参数,涉及方法:properties.load(),inputstream.getClass().getClassLoader().getResourceAsStream(配置文件名)
(2)加载数据库驱动:Class.forName(Driver)
(3)获得连接:DriverManager.getConnection(URL,password,user)

4.向数据库中执行增、删、改操作之Statement
(1).获取数据库连接
(2).准备SQL语句(Statement所用的SQL语句只能是拼出来的SQL语句)
(3).利用Connection.createStatement()方法得到Statement对象
(4).调用Statement.executeUpdate(SQL)执行对应的增删改操作
(5).关闭连接(从外向里关)

5.数据库的查操作:利用Resultset(结果集)
(1).步骤同上
(2).Statement.executeQuery(SQL)返回结果集
(3).利用Resultset.getXX(参数可以是列名活着列号)来获得结果

6.利用PrepareStatement来简化SQL语句的拼写:(写预编译的sql语句)
例子:String sql=“insert into person Values(?,?,?,?)”
(1).调用Connection.PrepareStatement(sql)得到PrepareStatement对象
(2).调用PrepareStatement.setXXX(索引值,每个问号所代表的值)    索引值从1开始
(3)调用PrepareStatement的executeQuery()或executeUpdate()方法实现增删改查操作,注意:此时不需要传sql语句.
好处:1.可以写预编译的sql语句
          2.防止sql驻入
           3.可以提高操作数据库的速度

7.利用反射及JDBC元数据编写通用的查询方法
(1).ResultSetMetaData:是描述Resultset的元数据对象,可以从中获取到结果集中有多少列,列的别名……
(2).使用方法:利用Resultset.getMetaData()方法得到ResultsetMetaData对象
(3).常用方法:①getColumnCount()得到所有的列
②getColumnLabel()得到列的别名

8.JDBC的DAO设计模式
DAO(Data Access Object):数据访问对象,包含了对数据的CRUD(create read Update delete)操作,而不包含任何业务相关的信息。
优点:实现功能的模块化,有利于代码的维护和升级。
使用JDBC包含的方法:Update(String sql,Object...args)
使用范型来设计DAO的方法适应相应的增删改查操作。

9.使用beanutils工具操作JavaBean
(1).在JavaEE中,Java类的属性通过setter和getter来定义,去掉set和get之后就是Java类的属性。
(2)操作Java类属性的工具包:beanutils同时beanutils要借助comment-login.jar包
Object obj=new Student();
Beanutils.setProperties(obj,“id”,201421112027)
Beanutils.getProperties(obj,“id”);

10.使用JDBC驱动程序处理元数据
(1)DataBaseMetaData类,提供许多用于获得源数据的方法,通过这些方法可以详细的了解到数据库的各种信息。
(2)ResultSetMeta类:得到结果集中的基本信息

11.通过JDBC如何获得插入数据的主键值?
通过Connection.getPrepareStatement(sql,autoGeneratedKeys)方法获得
autoGeneratedKeys=Statement.return_Generate_Keys常量
获取主键:ResultSet rs=PrepareStatement.getGenerateKeys();

12.使用JDBC处理BLOB类型的数据
(1)MySQL的BLOB的类型:TinyBlob,最大255个字节
Blob:65k
MediumBlob:16M
LongBlob:4G
(2)插入Blob类型的数据必须使用PrepareStatement对象
调用SetBlob(int index,InputStream inputStream)
(3)读取Blob数据:
①使用getBlob方法得到Blob对象
②调用Blob的getBinaryStream()得到输入流,再用IO操作即可。

13.JDBC处理事务(transaction)
(1).事务:一组逻辑操作单元,使数据库从一种状态变为另一种状态。
(2).事务的操作:先定义一个事务,然后对数据库进行修改操作,这时如果提交这些修改的数据就被永久的保存下来,如果回退,数据库管理系统将放弃所有的修改操作而回到开始事务的状态。
(3)事务的属性:ACID
①原子性:事务是一个不可分割的单位,要么都发生,要么都不发生。
②一致性:事务必须使数据库从一个一致性状态,变到另一个一致性状态。
③隔离性:事务的执行不能被其他事务干扰
④持久性:事务一旦提交对数据库中的数据的改变就是永久性的。

(4)JDBC的事务处理:
①如果多个操作,每一个操作使用的是自己单独的连接,则无法保证事务。
②事务的开始:Connection.setAutoCommit(false)取消默认提交,如果都成功则提交事务(Connection.Commit),如果出异常则在catch块中回滚事务。(Connection.rollback)

(5)事务的隔离级别:
①脏读
②不可重复读
③幻读
事务的隔离性的越好,事务的并发性就越差。
READ UNCOMMITTED(读未提交)
READ COMMITED(读已提交):普遍使用的隔离级别
REPEATABLE READ(可重复读)
SERIALIZABLE(串行化)
Oracle支持读已提交和串行化,默认是读已提交
MySQL四种都支持,默认为可重复读
可以通过:Connection. setTransactionIsolation(事务的隔离级别常数)来设置事务的隔离级别

14.JDBC批量处理数据库
(1).批量处理语句包括两个方法:①addBatch(String)添加需要批量处理的sql语句或者参数
②executeBatch()执行批量处理语句
(2)操作方法:①在for循环中“积攒”sql语句PrepareStatement.addBatch();
②当sql语句“积攒”到一定程度以后执行sql语句,同时清空之前“积攒”的sql语句,例如:if(i%300==0){PrepareStatement.executeBatch(); PrepareStatement.clearBatch();}
若需要批量处理的数据不能被300整除,则需要额外再执行一遍。

15.JDBC-dbcp数据库连接池
(1)数据库连接池的必要性:解决数据库的连接资源的重复利用。
(2)数据库连接池的思想:为数据库连接建立一个缓冲池,预先在缓冲池中存放一定数量的连接,当需要建立数据库连接时,只需要从缓冲池中取出一个,使用完毕再放回去。
(3)优点:①资源重用。②更快的系统反应速度。③新的资源分配手段④统一的连接管理,避免数据库连接的泄露。
(4)如何使用?
①导入commons-dbcp.jar,同时commons-dbcp.jar依赖于commons-poor.jar
②创建数据库连接池(默认把DataSource称为数据库连接池)
1)创建dbcp数据源实例
DataSource dataSource=null;
dataSource=new BasicDataSource();
2)为数据源指定必须的属性:Driver,URL,user,password
3)指定一些可选的属性eg:
①dataSource.setInitialSize(10)(初始化连接数)
②指定数据库的最大连接数:同一时刻可以同时向数据库中申请的连接数。
eg:dataSource.setMaxActive(50);
③指定最小连接数:在数据库连接池中保存的最少得空闲连接数量。
eg:dataSource.setMinIdle(5);
④等待数据库连接池分配连接的最大等待时间,单位为毫秒,超出该时间将抛出异常。
eg:dataSource.setMaxWait(1000×5);
提示:可以将上述所设置的参数放在一个配置文件中再通过:
DataSource dataSource=BasicDataSourceFactory.createDataSource(Properties);的方式将属性读取进来。
配置文件中的键需要来自于BasicDataSourceFactory中的属性.
4)从数据源中获取连接。

16.JDBC_C3P0数据库连接池
(1)导入c3p0.jar
(2)创建c3p0的配置文件:c3p0-config.xml(具体实现可以参考c3p0下的index.html文档说明中的Appensix B:Configuation Files内容)
(3)创建ComboPooledDataSource实例。
DataSource dataSource=new ComboPooledDataSource("连接池的名字");
(4)从DataSource中获取数据库连接

17.使用DBUtils进行更新操作
(1)导入commons-dbutils.jar
(2)创建QueryRunner实例。
(3)准备sql语句
(4)调用QueryRunner类的Update()方法

18.使用DBUTILS进行查询操作
原理图:

19.使用DBUtils编写通用的DAO

20.使用jdbc调用函数和存储过程



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值