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;
	}

}



猜你喜欢

转载自blog.csdn.net/a18755425397/article/details/80733306
今日推荐