java学习之mysql第二十三( --DBUtils类库--DataSource( 数据池 )--Properties集合使用-- )

你想获得的多大的成功,你愿意为这份成功付出什么?

1. Dbutils

      定义: 第三方类库,是数据库的工具类.

       用途: 简化数据库操作的代码和JDBC链接的代码;

               1. 对于数据表的读操作, 他可以把结果转换成list,Array, set 等java集合, 便于程序员的操作;

               2.对数据表的写操作, 也变得简单,( 只需要sql语句 ).

               3.可以使用数据源,使用 JNDI,数据库连接池 等技术来优化性能--重用已经构造号的数据池连接对象;

     DBUtils包括3个包:          

             org.apache.commons.dbutils  : 
            org.apache.commons.dbutils.handlers  :
            org.apache.commons.dbutils.wrappers : 

     DBUtils 三个重要的类分别在三个包下面;

            1. DBUtil  关闭数据库, close 或者 closeQuietly : 安静的关闭不会抛出异常 SQLException;

            2.QueryRunner : 负责查询的对象的类, 

            3. ResultSetHandle :  查询结果的返回集


1. 增删改: 用QueryRunner.updata(  collection ,sql, params  ); 返回结果是int

例题:  1. 插入一条数据;

		// 获取链接对象;
		QueryRunner queryRunner = new QueryRunner();
		Connection connection = DBUtil.getConnection();
		String sql = "insert into goods values (null,?,?,?)";
		// 替换占位符
		Object[] params = { "糖", 4, "好吃不贵" };
		int update = queryRunner.update(connection, sql, params);
		System.out.println(update);
		// 处理返回结果
		DbUtils.closeQuietly(connection);

例题: 2.替换一条数据:

 QueryRunner queryRunner = new QueryRunner();
		 String sql ="update goods set sname = ?,sprice=?";
		 Object[] object = {"漏气",100 };
		  Connection connection = DBUtil.getConnection();
		int update = queryRunner.update(connection, sql, object);
		System.out.println(update);
		DbUtils.close(connection);

例题3.删除一条数据:

	 QueryRunner queryRunner = new QueryRunner();
		 String sql ="delete from goods where sid=?";
		 Object[] object = {2};
		  Connection connection = DBUtil.getConnection();
		int update = queryRunner.update(connection, sql, object);
		System.out.println(update);
		DbUtils.close(connection);
	

2.org.apache.commons.dbutils.handlers 包下面的一些类 可以将查询的结果进行转化; 

ArrayHandler :将ResultSet中第一行的数据转化成对象数组
ArrayListHandler将ResultSet中所有的数据转化成List,List中存放的是Object[]
BeanHandler :将ResultSet中第一行的数据转化成类对象
BeanListHandler :将ResultSet中所有的数据转化成List,List中存放的是类对象
ColumnListHandler :将ResultSet中某一列的数据存成List,List中存放的是Object对象
KeyedHandler :将ResultSet中存成映射,key为某一列对应为Map。Map中存放的是数据
MapHandler :将ResultSet中第一行的数据存成Map映射
MapListHandler :将ResultSet中所有的数据存成List。List中存放的是Map
ScalarHandler :将ResultSet中一条记录的其中某一列的数据存成Object
    1.ArrayHandler: 来处理
private static void fun1ArrayHandler() throws SQLException {
		// 使用ArrayHandler来处理
		QueryRunner runner = new QueryRunner();
		// 链接通往数据库的桥梁
		Connection connection = DBUtil.getConnection();
		String sql = "select * from goods";
		// rsh = ResultSetHandler<T>  rsh, 
		Object[] query = runner.query(connection, sql, new ArrayHandler());
		//遍历返回的结果集 查看返回内容
		//使用Arrayhanlder 查询时候,会返回数据库中 一条记录并且,会把该记录的字段放入一个object 数据中;
		for (Object object : query) {
			System.out.println(object);
		}
	}

   2. BeanHandler来处理; 注意new BeanHandler<Goods>( type ); type 是.class文件;

		// 使用BeanHandler来处理
		// 可以将查询的结果帮你放入实体对象中;
		QueryRunner runner = new QueryRunner();
		// 链接通往数据库的桥梁
		Connection connection = DBUtil.getConnection();
		String sql = "select * from goods";
		// 参数是放入的对象的实体类的.class文件类型;
		Goods query = runner.query(connection, sql, new BeanHandler<Goods>(Goods.class));
		System.out.println();
	

2.数据池 DataSourse( 数据源 数据库连接池  ) 实现类( BasicDataSource )

* 数据库链接池保存了许多connection;
 * 在操作数据库时,实际最耗费创建连接和销毁连接;
 * 当用户需要做查询数据库的操作时候,会从连接池中取出一个使用,使用完毕
 * 不会销毁这个连接, 而是重新放入连接池中 备用
 * Java 为数据库连接池准备一套规范接口;
 * javax.sql 相当于扩展包; 接口dataSource 的实现类BasicDataSource
 * 这套规范也是由数据库厂商实现;
 * 并且该类也提供获取链接的方法;
 * 常用数据库连接池
 * DBCP C3P0;

 例题: 利用数据库链接池 获取链接;

// 利用数据库连接池获取链接
		BasicDataSource dataSource = new BasicDataSource();
		dataSource.setDriverClassName("com.mysql.jdbc.Driver");
		dataSource.setUsername("root");
		dataSource.setUrl("jdbc:mysql://localhost:3306/myjdbc01");
		dataSource.setPassword("123456");
		// 获取链接
		Connection connection = dataSource.getConnection();
		System.out.println(connection);
  获取DataSource的工具类
public class DataSourceUtil {
	// 声明一个basicDataSource
	private static BasicDataSource dataSource = new BasicDataSource();
	// 设置数据源
	static {
		// 设置基础设置;
		dataSource.setDriverClassName("com.mysql.jdbc.Driver");
		dataSource.setUsername("root");
		dataSource.setUrl("jdbc:mysql://localhost:3306/myjdbc01");
		dataSource.setPassword("123456");

		// 扩展设置. ()
		// 初始化链接数量
		dataSource.setInitialSize(10);
		// 设置最大连接数量
		dataSource.setMaxActive(8);
		// 设置最大空闲链接数量
		dataSource.setMaxActive(5);
		// 设置最小连接数量
		dataSource.setMaxIdle(1);
	}

	// 获取数据源的方法
	public static DataSource getDataSource() {
		return dataSource;
	}
}

3.如何设置配置文件properties !

public class Demo08如何读取properties {
	public static void main(String[] args) throws IOException {
		// 读文件
		Properties properties = new Properties();
		// 获取bin文件夹路径路径classpath
		URL url = JDBCUtils.class.getClassLoader().getResource("db.properties");
		System.out.println(url);
		// properties.load(); 保证bin文件下面要有这个文件
		// 需要把配置文件放到工程目录的src 文件下面, 这时这个文件会被编译到bin文件夹下面;
		InputStream inputStream = JDBCUtils.class.getClassLoader().getResourceAsStream("db.properties");
		//从输入流中进行读取;
		properties.load(inputStream);
		System.out.println(properties.getProperty("url"));

	}
}

public class DBUtil {
	// 声明成员变量方便使用
	private static  Connection connection;
	private static String url;
	private static String password;
	private static String username;
	private static String driveClass;

	static {
		 readFile();
		 //注册驱动
		 try {
			Class.forName(driveClass);
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	// 读文件的方法
	public static void readFile() {
		// 读文件
		// 通过类加载器直接获取bin文件夹下的该文件
		Properties properties = new Properties();
		InputStream inputStream = DBUtil.class.getClassLoader().getResourceAsStream("db.properties");
		try {
			properties.load(inputStream);
			driveClass = properties.getProperty("driveClass");
			url = properties.getProperty("url");
			password = properties.getProperty("password");
			username = properties.getProperty("username");
		} catch (IOException e) {
			e.printStackTrace();
		}

	}
	
	//获取链接 这里需要一个Connection;;
	public static Connection getConnection() {
		try {
			connection = DriverManager.getConnection(url, username, password);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			throw new RuntimeException("获取链接时候失败");
		}
		return connection;
	}

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
package com.parddu.dao; import java.io.IOException; import java.sql.*; import java.util.Properties; /** * 数据库功能类 * @author parddu * @version Sep 29, 2010 9:49:31 AM */ class DButil { private String driver=null; //驱动 private String dbName=null; //数据库名 private String host=null; //主机名 private String point=null; //端口 private String userName=null; //登录帐号 private String userPass=null; //登录密码 private static DButil info = null; private DButil(){} /** * 初始化方法,加载数据库连接信息 * @throws IOException */ private static void init() throws IOException{ Properties prop = new Properties(); prop.load(DButil.class.getResourceAsStream("/db_config.properties")); info = new DButil(); info.driver = prop.getProperty("driver"); info.dbName = prop.getProperty("dbName"); info.host = prop.getProperty("host"); info.point = prop.getProperty("point"); info.userName = prop.getProperty("userName"); info.userPass = prop.getProperty("userPass"); } /** * 得到数据库连接对象 * @return 数据库连接对象 */ static Connection getConn(){ Connection conn=null; if(info == null){ try { init(); } catch (IOException e) { throw new RuntimeException(e.getMessage()); } } if(info!=null){ try { Class.forName(info.driver); String url="jdbc:sqlserver://" + info.host + ":" + info.point + ";databaseName=" + info.dbName; conn=DriverManager.getConnection(url,info.userName,info.userPass); } catch (Exception e) { throw new RuntimeException(e.getMessage()); } } else{ throw new RuntimeException("读取数据库配置信息异常!"); } return conn; } /** * 关闭查询数据库访问对象 * @param rs 结果集 * @param st 上下文 * @param conn 连接对象 */ static void closeConn(ResultSet rs, Statement st,Connection conn){ try { rs.close(); } catch (Exception e) {} try { st.close(); } catch (Exception e) {} try { conn.close(); } catch (Exception e) {} } /** * 关闭增、删、该数据库访问对象 * @param st 上下文对象 * @param conn 连接对象 */ static void closeConn(Statement st ,Connection conn){ try{ st.close(); conn.close(); }catch(Exception e){} } }
在上一篇文章中,我们介绍了JDBC中的PreparedStatement和ResultSet类的使用。在本文中,我们将介绍Apache Commons DbUtils库中的QueryRunner类。 QueryRunner类是Apache Commons DbUtils库中的一个类,它封装了大量的JDBC操作,简化了JDBC编程的复杂度。使用QueryRunner类可以避免编写大量的JDBC代码,提高开发效率。 使用QueryRunner类需要引入以下依赖: ```xml <dependency> <groupId>commons-dbutils</groupId> <artifactId>commons-dbutils</artifactId> <version>1.7</version> </dependency> ``` 接下来我们来看一下如何使用QueryRunner类。 1. 建立连接 在使用QueryRunner类之前,需要先建立与数据库的连接。这可以通过JDBC中的DriverManager类来实现。例如: ```java Connection conn = DriverManager.getConnection(url, user, password); ``` 其中,url、user和password分别表示数据库的URL、用户名和密码。 2. 执行SQL语句 QueryRunner类中提供了多个方法来执行SQL语句。其中,最常用的方法是query()和update()方法。 query()方法用于查询数据,它的使用方式如下: ```java QueryRunner qr = new QueryRunner(); String sql = "SELECT * FROM user WHERE id=?"; Object[] params = {1}; ResultSetHandler<List<User>> rsh = new BeanListHandler<>(User.class); List<User> userList = qr.query(conn, sql, rsh, params); ``` 其中,第一个参数conn表示与数据库的连接,第二个参数sql表示要执行的SQL语句,第三个参数rsh表示查询结果的处理器,第四个参数params是一个数组,表示SQL语句中的参数。 update()方法用于更新数据,它的使用方式如下: ```java QueryRunner qr = new QueryRunner(); String sql = "UPDATE user SET name=? WHERE id=?"; Object[] params = {"张三", 1}; qr.update(conn, sql, params); ``` 其中,第一个参数conn表示与数据库的连接,第二个参数sql表示要执行的SQL语句,第三个参数params是一个数组,表示SQL语句中的参数。 3. 释放资源 在使用QueryRunner类完成数据库操作后,需要释放相应的资源,包括ResultSet、Statement和Connection等。这可以通过调用DbUtils类中的close()方法来实现。例如: ```java DbUtils.close(resultSet); DbUtils.close(statement); DbUtils.close(connection); ``` 4. 示例代码 下面是一个完整的示例代码,演示了如何使用QueryRunner类完成数据库操作: ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.List; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.ResultSetHandler; import org.apache.commons.dbutils.handlers.BeanListHandler; public class QueryRunnerDemo { public static void main(String[] args) throws SQLException { String url = "jdbc:mysql://localhost:3306/test"; String user = "root"; String password = "123456"; Connection conn = DriverManager.getConnection(url, user, password); // 查询数据 QueryRunner qr = new QueryRunner(); String sql = "SELECT * FROM user WHERE id=?"; Object[] params = {1}; ResultSetHandler<List<User>> rsh = new BeanListHandler<>(User.class); List<User> userList = qr.query(conn, sql, rsh, params); for (User user : userList) { System.out.println(user); } // 更新数据 sql = "UPDATE user SET name=? WHERE id=?"; params = new Object[]{"张三", 1}; qr.update(conn, sql, params); conn.close(); } } ``` 以上就是QueryRunner类的使用方法。QueryRunner类封装了大量的JDBC操作,可以避免编写大量的JDBC代码,提高开发效率。同时,使用QueryRunner类也需要注意资源的释放,避免出现资源泄漏的情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值