概述
事务
1. 事务在命令行中的命令如下:
start transaction:开启一次事务
rollback:回滚
commit:提交事务
2. JDBC中与事务有关的方法:
a) Connection.setAutoCommit(boolean b):将默认的事务设置false,开启自定义事务
b) Connection.rollback():数据回滚。
c) Connection.rollback(Savepoint sp):回滚到某个回滚点
d) Connection.commit():提交事务
3. 事务的特性:
a) A:原子性。说明事务是一个不可分隔的单位
b) C:一致性。事务必须使数据库从一个一致性状态变换到另外一个一致性状态
c) I:隔离性:一个事务不能被其他事务打扰。
d) D:持久性,事务一旦提交,就应该被永久保存起来。
4. 事务可能会出现的错误:如果不考虑事务的隔离级别,会出现以下“不正确”的情况:
a) 脏读:指一个事务读到另一个事务中未提交的数据
b) 不可重复读:针对一条记录的,同一条记录数据前后不一样
c) 虚读(幻读):针对一张表,前后读到的记录条数不一样。
5. MySql中控制事务隔离级别的语句:
a) 查看当前的事务隔离级别:select @@tx_isolation;
b) 设置隔离级别(四种):set transaction isolation level
1) READ UNCOMMITTED:脏读、不可重复读、虚读都有可能发生。
2) READ COMMITTED:能避免脏读,不可重复读、虚读都有可能发生。
3) REPEATABLE READ:能避免脏读、不可重复度,虚读都有可能发生。
4) SERIALIZABLE:能避免脏读、不可重复度、虚读。
数据池
1. 数据池:一个存储着很多Connection对象的容器。每次需要连接取出一个,关闭时,将取出的Connection对象放回容器中。
2. 编写标准的数据库连接池。如果编写自己的数据池,实现javax.sql.DataSource接口才是标准的数据库连接池(数据源),解决难题就是将Connection中的Close方法进行改写。对于一个已知类的某个方法进行功能上的改变有以下三种方式(对Connection的close方法进行改写)。
a) 定义子类,扩展父类的某个功能(此处行不通):因为子类要继承Connection,而Connection是一个接口。如果要改写的话,必须要改写全部。
b) 利用包装设计模式改写原有的类的功能。
c) 利用动态代理来进行改写
3. 开源的数据源使用:
a) DBCP:DataBase Connection Pool的编写步骤
1) 需要的jar:commons-dbcp.jar commons-pool.jar
2) 把DBCP的配置文件(dbcpconfig.properties)拷贝到构建路径中
3) 得到数据源
DataSource BasicDataSourceFactory.createDataSource(props):得到数据源
b) C3p0:是一个机器人的代号
1) 拷贝jar包:c3p0.jar
2) 把c3p0的配置文件(c3p0-config.xml)拷贝到构建路径中
3) 得到数据源:ComboPoolDataSource cps=new ComboPoolDataSource();
Connection geyConnection()
c) 好处:可以连接多个数据库,DBCP只能连接一个
d) 使用更简单。
数据元信息获取
1. DatabaseMetaData对象常用的方法:
a) getURL():返回一个String类对象,代表数据库的URL。
b) getUserName():返回连接当前数据库管理系统的用户名。
c) getDatabaseProductName():返回数据库的产品名称。
d) getDatabaseProductVersion():返回数据库的版本号。
e) getDriverName():返回驱动驱动程序的名称。
f) getDriverVersion():返回驱动程序的版本号。
g) isReadOnly():返回一个boolean值,指示数据库是否只允许读操作。
2. ParameterMetaData:PreparedStatement的方法获得getParameterMeteData
a) getParameterCount() : 获得指定参数的个数
b) getParameterType(int param) : 获得指定参数的sql类型(驱动可能不支持)
3. ResultSetMetaData对象:通过ResultSet. getMetaData() 的方法获得
a) getColumnCount() :返回resultset对象的列数
b) getColumnName(int column) :获得指定列的名称
c) getColumnTypeName(int column):获得指定列的类型 java.sql.Type
DBUtil框架的使用
1. DbUtils类提供如关闭连接,,装载JDBC驱动程序等常规工作。方法都是静态的
a) public static void close(…) throws java.sql.SQLException:关闭
b) public static void closeQuietly(…): 这一类方法不仅能在Connection、Statement和ResultSet为NULL情况下避免关闭,还能隐藏一些在程序中抛出的SQLEeception
c) public static void commitAndCloseQuietly(Connection conn): 用来提交连接,然后关闭连接,并且在关闭连接时不抛出SQL异常。
d) public static boolean loadDriver(java.lang.String driverClassName):这一方装载并注册JDBC驱动程序,如果成功就返回true。使用该方法,你不需要捕捉这个异常ClassNotFoundException。
2. QueryRunner类:该类简化了SQL查询,与esultSetHandler组合在一起使用可以完成大部分的数据库操作,能够大大减少编码量。
a) 默认的构造方法:一般如果是默认的话。得需要在外部得到一个Connection对象,一般用在事务控制使用
b) 需要注入DataSource的构造方法:不需要在外部创建Connection对象。
c) public Object query(Connection conn, String sql, Object[] params, ResultSetHandler rsh) throws SQLException:执行一个查询操作,在这个查询中,对象数组中的每个元素值被用来作为查询语句的置换参数。该方法会自行处理 PreparedStatement 和 ResultSet 的创建和关闭。
d) public Object query(String sql, Object[] params, ResultSetHandler rsh) throws SQLException:几乎与第一种方法一样;唯一的不同在于它不将数据库连接提供给方法,并且它是从提供给构造方法的数据源(DataSource) 或使用的setDataSource 方法中重新获得 Connection
e) public Object query(Connection conn, String sql, ResultSetHandler rsh) throws SQLException : 执行一个不需要置换参数的查询操作。
f) public int update(Connection conn, String sql, Object[] params) throws SQLException:用来执行一个更新(插入、更新或删除)操作。
g) public int update(Connection conn, String sql) throws SQLException:用来执行一个不需要置换参数的更新操作。
3. ResultSetHandler接口:处理ResultSet,将数据交给此类处理。它的方法Object handle (java.sql.ResultSet .rs)用来处理数据。常见子类功能的实现类如下
a) ArrayHandler:把结果集中的第一行数据转成对象数组
b) ArrayListHandler:把结果集中的每一行数据都转成一个数组,再存放到List中。
c) BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中
d) BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。
e) ColumnListHandler:将结果集中某一列的数据存放到List中。
f) KeyedHandler(name):将结果集中的每一行数据都封装到一个Map<列名,列值>里,再把这些map再存到一个map里,其key为指定的key。
g) MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值
h) MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List
最后
以上就是大力微笑为你收集整理的jdbc学习二事务与数据源的全部内容,希望文章能够帮你解决jdbc学习二事务与数据源所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复