(一)JDBC之事务相关概念
1)概念:事务使指一组最小逻辑操作单元,里面有多个操作组成。组成事务的每一部分必须要同时提交成功,如果有一个操作失败,整个操作就回滚。
2)事务ACID特性:
1.原子性(Atomicity)
原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。原子性是一个最小逻辑操作单元 。
2.一致性(Consistency)
事务必须使数据库从一个一致性状态变换到另外一个一致性状态。
3.隔离性(Isolation)
事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
4.持久性(Durability)
持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。事务与事务之间是隔离的。
(二)JDBC之批处理
批处理:一次性处理大量数据.
批处理相关方法:
void addBatch(String sql) 添加批处理
void clearBatch() 清空批处理
int[]executeBatch() 执行批处理
代码:
ArrayList<User> list = new ArrayList<User>();
for(int i=0;i<100;i++){
User user = new User(i,"张三"+i);
list.add(user);
}
//把这100个用户添加到数据库里面去
Connection conn = JDBCUtil.getConnection();
String sql="insert into student values(?,?)";
PreparedStatement statement = conn.prepareStatement(sql);
//用批处理来执行
for(User u:list){
statement.setInt(1,u.getId());
statement.setString(2, u.getUsername());
//调用批处理
statement.addBatch();
}
//执行批处理
statement.executeBatch();
//清空批处理
statement.clearBatch();
//释放资源
JDBCUtil.close(conn, statement);
(三)连接池
连接池:是创建和管理一个连接的缓冲池的技术,这些连接准备好被任何需要它们的线程使用。当一个线程需要用JDBC对数据库进行操作时,它从池中请求一个连接。当这个线程使用完了这个连接,将它返回到连接池中,这样它就可以被想要使用它的线程使用。连接池可以极大的改善用户的JAVA应用程序的性能。
1)C3P0:是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。要求必须掌握并熟练运用
使用步骤:
1.导入jar包(c3p0-0.9.1.2.jar)
2.BasicDataSource ds = new BasicDataSource();
设置参数
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql:///mydb_01");
ds.setUsername("root");
ds.setPassword("root");
获取预编译对象
Connection conn = ds.getConnection();
String sql="insert into student values(?,?)";
PreparedStatement statement = conn.prepareStatement(sql);
statement.setNull(1,Types.INTEGER);
statement.setString(2,"王五");//括号内的参数:(问号的序号,值)
statement.executeUpdate();
ds.close();
2)dbutils:是apache组织的一个工具类,jdbc的框架,更方便我们使用,需要配合c3p0去使用
使用步骤:
1.导入jar包(commons-dbutils-1.4.jar)
2.创建一个QueryRunner类
QueryRunner:操作sql语句
构造器:new QueryRunner(Datasource ds);
底层帮助创建连接,创建语句执行者 ,释放资源.
常用方法:query(..):update(..):
3.编写sql
4.执行sql:query(..); update(...);
执行查询后返回的结果集
ResultSetHandler:封装结果集 接口
BeanListHandler, 将查询结果的每一条记录封装成指定的bean对象,将每一个bean对象放入list中 返回.
ComboPooledDataSource ds = new ComboPooledDataSource();
QueryRunner runner = new QueryRunner(ds);
String sql = "insert into student values(4,‘张三‘)";
sql = "select * from student";
// 查询出所有数据 封装为对象 再把对象装到集合里面去
List<User> list = runner.query(sql, new BeanListHandler<>(User.class));
System.out.println(list);
原文:http://12983104.blog.51cto.com/12973104/1974382