JDBC(二)

 (一)JDBC之事务相关概念

1)概念:事务使指一组最小逻辑操作单元,里面有多个操作组成。组成事务的每一部分必须要同时提交成功,如果有一个操作失败,整个操作就回滚。

2)事务ACID特性:

1.原子性(Atomicity)
原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。原子性是一个最小逻辑操作单元 。 

2.一致性(Consistency)
事务必须使数据库从一个一致性状态变换到另外一个一致性状态。

3.隔离性(Isolation)
事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。

4.持久性(Durability)
持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。事务与事务之间是隔离的。 

(二)JDBC之批处理

批处理:一次性处理大量数据.

批处理相关方法:

void addBatch(String sql) 添加批处理

void clearBatch()  清空批处理

int[]executeBatch() 执行批处理


eg:批量保存信息

	// 创建ArrayList集合存储User对象
	ArrayList<User> list = new ArrayList<User>();
	// 循环插入用户
	for (int i = 1; i < 50; i++) {
		User user = new User(i + 1, "张三" + i);
		list.add(user);
	}
	// 获取数据库连接对象
	Connection connection = JDBCUtil.getConnection();
	// 定义sql语句
	String sql = "insert into student values(?,?)";
	// 获取预编译对象
	PreparedStatement statement = connection.prepareStatement(sql);

	for (User u : list) {
		// 给问号赋值
		statement.setInt(1, u.getId());
		statement.setString(2, u.getName());

		// 调用批处理
		statement.addBatch();
	}

	// 执行批处理
	statement.executeBatch();

	// 清空批处理
	statement.clearBatch();

	// 释放资源
	JDBCUtil.close(connection, statement);

(三)JDBC第三方连接池

   连接池:是创建和管理一个连接的缓冲池的技术,这些连接准备好被任何需要它们的线程使用。当一个线程需要用JDBC对数据库进行操作时,它从池中请求一个连接。当这个线程使用完了这个连接,将它返回到连接池中,这样它就可以被想要使用它的线程使用。连接池可以极大的改善用户的JAVA应用程序的性能。

   常见的连接池:DBCP  和  C3P0。

1)DBCP(DataBase connection pool):是apache上的一个java连接池项目,也是tomcat使用的一个连接池组件。

使用步骤:

1.导入jar包(commons-dbcp-1.4.jar  和  commons-pool-1.5.6.jar) 

2.如下:

		// 1.硬编码的方式
		/*
		 * BasicDataSource ds = new BasicDataSource();
		 * 
		 * ds.setDriverClassName("com.mysql.jdbc.Driver");
		 * ds.setUrl("jdbc:mysql:///mydb_02"); ds.setUsername("root");
		 * ds.setPassword("root");
		 * 
		 * // 获取数据库连接对象
		 *  Connection connection = ds.getConnection();
		 * 
		 * // 定义sql语句 
		 * String sql = "insert into student values(?,?)"; 
		 * // 获取预编译对象
		 * PreparedStatement statement = connection.prepareStatement(sql);
		 * statement.setInt(1, 3); statement.setString(2, "李四");
		 * 
		 * statement.executeUpdate();
		 * 
		 * // 释放资源
		 *  statement.close(); 
		 *  connection.close(); 
		 *  ds.close();
		 */

		// 2.配置文件的方式
		Properties properties = new Properties();
		properties.load(new FileInputStream("src/dbcp.properties"));

		DataSource ds = BasicDataSourceFactory.createDataSource(properties);
		
		Connection connection = ds.getConnection();

		// 定义sql语句
		String sql = "insert into student values(?,?)";
		// 获取预编译对象
		PreparedStatement statement = connection.prepareStatement(sql);
		statement.setInt(1, 3);
		statement.setString(2, "李四");

		statement.executeUpdate();

2)C3P0:是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。

c3p0和DBCP区别: DBCP没有自动回收空闲连接的功能,c3p0有自动回收空闲连接的功能。

使用步骤:

1.导入jar包(c3p0-0.9.1.2.jar)

2.如下:

		// 1.硬编码的形式
		/*
		 * ComboPooledDataSource ds = new ComboPooledDataSource();
		 * 
		 * ds.setDriverClass("com.mysql.jdbc.Driver");
		 * ds.setJdbcUrl("jdbc:mysql:///mydb_02"); ds.setUser("root");
		 * ds.setPassword("root");
		 * 
		 * // 获取连接对象 
		 * Connection connection = ds.getConnection();
		 * 
		 * String sql = "insert into student values(4,'王五')";
		 * PreparedStatement statement = connection.prepareStatement(sql);
		 * 
		 * statement.executeUpdate();
		 * 
		 * ds.close();
		 */

		// 2.配置文件方式
		/*
		 * 要求:
		 * 	1:配置文件的名称:c3p0.properties 或者 c3p0-config.xml
		 * 	2:配置文件的路径:在src下
		 * */
		ComboPooledDataSource ds = new ComboPooledDataSource();

		// 获取数据库连接对象
		Connection connection = ds.getConnection();

		// 获取预编译对象
		String sql = "insert into student values(?,?)";
		PreparedStatement statement = connection.prepareStatement(sql);

		statement.setInt(1, 5);
		statement.setString(2, "赵六");

		statement.executeUpdate();
3)dbutils:是apache组织的一个工具类,jdbc的框架,更方便我们使用
使用步骤:
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对象操作数据库
		QueryRunner runner = new QueryRunner(ds);

		// String sql = "insert into User values(4,'王五')";
		// runner.update(sql);

		String sql = "select * from User";
		// 查询出所有数据 封装为对象 再把对象装到集合里面去
		List<User> list = runner.query(sql, new BeanListHandler<User>(
				User.class));
		System.out.println(list);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值