Java学习路程之数据库连接, common-dbutils和数据源

一.数据库连接
1.封装数据库连接

public class Day28{
	public static void main(String[] args) throws SQLException {
		//查询sort全表并且将查询出来的每条数据封装成一个对象
		//给每一张表创建一个实体类
		Connection connection = JDBCConnection.getConnection();
		//获取SQL语句执行对象
		Statement statement = connection.createStatement();
		String sql = "select * from sort";
		ResultSet resultSet = statement.executeQuery(sql);
		//结果处理
		while (resultSet.next()) {
			Sort sort = new Sort();
			sort.setSid(resultSet.getInt("sid"));
			sort.setSname(resultSet.getString("sname"));
			sort.setSprice(resultSet.getDouble("sprice"));
			sort.setSdesc(resultSet.getString("sdesc"));
			System.out.println(sort);
		}
		//关闭资源
		JDBCConnection.myClose(connection, resultSet, statement);
	}
}

public class JDBCConnection {
	//声明连接
	private static Connection connection;
	//注册驱动 在静态代码块中会只注册一次
	static{
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
			//抛出运行时异常停止程序
			throw new RuntimeException("注册驱动失败");
		}
	}
	private JDBCConnection(){
	}
	//获取连接方法
	public static Connection getConnection(){
		//数据库地址
		String url = "jdbc:mysql://localhost:3306/ldmysql01";
		/数据库/用户名
		String user = "root";
		//数据库密码
		String password = "123456";
		try {
			//获取连接对象
			connection = DriverManager.getConnection(url, user, password);
		} catch (SQLException e) {
			e.printStackTrace();
			throw new RuntimeException("数据库连接失败");
		}
		return connection;
	}
	//关闭资源方法
	public static void myClose(Connection connection, ResultSet resultSet, Statement statement){
		//当使用try catch处理异常时,发生异常时,不影响下面代码的执行.当自己抛出异常时,异常发生会导致程序中断.
		if (connection != null) {
			try {
				connection.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if (resultSet != null) {
			try {
				resultSet.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if (statement != null) {
			try {
				statement.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
}

二.common-dbutils 工具类库
1.dbutils类
closeQuietly(Connection conn)方法关闭资源
2.queryrunner类
query(Connection conn, String sql, ResultSetHandler rsh, Object… params) 查询
参数1:数据库连接对象 参数2:SQL语句(可使用占位符) 参数3:查询后得到的结果集(可以选用不同类型的结果集) 参数4:替换SQL语句占位符
update(Connection conn, String sql, Object… params) 更新
插入数据

    //创建查询对象
	QueryRunner queryRunner = new QueryRunner();
	Connection connection = JDBCutil1.getConnection();
	String sql = "insert into sort values (null, ?, ?, ?)";
	//创建数组 传参数
	Object[] params = {"热风鞋子", 100, "好穿不贵"};
	int row = queryRunner.update(connection, sql, params);
	System.out.println("受影响的行数" + row);
	//关闭资源
	DbUtils.close(connection);

删除 id为10的数据

	QueryRunner queryRunner = new QueryRunner();
	Connection connection = JDBCutil1.getConnection();
	String sql = "delete from sort where sid=?";
	int row = queryRunner.update(connection, sql, 10);
	System.out.println("受影响的行数" + row);
	DbUtils.close(connection);

修改id=8 毛巾 100 柔软

	QueryRunner queryRunner = new QueryRunner();
	Connection connection = JDBCutil1.getConnection();
	String sql = "update sort set sname=?, sprice=?, sdesc=? where sid=?";
	Object[] params = {"毛巾", 100, "柔软", 8};
	int row = queryRunner.update(connection, sql, params);
	System.out.println("受影响的行数" + row);
	DbUtils.close(connection);

3.ResaultSetHandle 提供结果集
ArrayHandler 默认返回查询的第一条数据

	String sql = "select * from sort";
	QueryRunner queryRunner = new QueryRunner();
	Connection connection = JDBCutil1.getConnection();
	Object[] query = queryRunner.query(connection, sql, new ArrayHandler());
	for (Object object : query) {
		System.out.println(object);
	}
	DbUtils.close(connection);

ArrayListHandler 返回多条记录

	String sql = "select * from sort";
	QueryRunner queryRunner = new QueryRunner();
	Connection connection = JDBCutil1.getConnection();
	List<Object[]> query = queryRunner.query(connection, sql, new ArrayListHandler());
	for (Object[] objects : query) {
		for (Object object : objects) {
			System.out.print(object+ " ");
		}
		System.out.println();
	}
	DbUtils.close(connection);

BeanHandler 默认只返回第一条数据

	String sql = "select * from sort";
	QueryRunner queryRunner = new QueryRunner();
	Connection connection = JDBCutil1.getConnection();
	Sort sort = queryRunner.query(connection, sql, new BeanHandler<>(Sort.class));
	System.out.println(sort);
	DbUtils.close(connection);

BeanListHandler 返回保存好的对象的list集合,返回所有数据

	String sql = "select * from sort";
	QueryRunner queryRunner = new QueryRunner();
	Connection connection = JDBCutil1.getConnection();
	List<Sort> query = queryRunner.query(connection, sql, new BeanListHandler<>(Sort.class));
	for (Sort sort : query) {
		System.out.println(sort);
	}
	DbUtils.close(connection);

ColumnListHandler 默认返回数据库中第一列数据,可以传入参数(字段名)

	String sql = "select * from sort";
	QueryRunner queryRunner = new QueryRunner();
	Connection connection = JDBCutil1.getConnection();
	List<Object> query = queryRunner.query(connection, sql, new ColumnListHandler<>("sname"));
	for (Object object : query) {
		System.out.println(object);
	}
	DbUtils.close(connection);

ScalarHandler 获取聚合函数返回的数据并且返回的是long型

	String sql = "select * from sort";
	QueryRunner queryRunner = new QueryRunner();
	Connection connection = JDBCutil1.getConnection();
	String sql2 = "select count(*) from sort";
	Long query = queryRunner.query(connection, sql2, new ScalarHandler<Long>());
	System.out.println(query);
	//或
	/*Number number = queryRunner.query(connection, sql2, new ScalarHandler<Long>());
	System.out.println(number.longValue());*/
	DbUtils.close(connection);

MapHandler 默认返回第一条数据

	String sql = "select * from sort";
	QueryRunner queryRunner = new QueryRunner();
	Connection connection = JDBCutil1.getConnection();
	Map<String, Object> map = queryRunner.query(connection,sql, new MapHandler());
	for (String key : map.keySet()) {
		System.out.println(key + " "+ map.get(key));
	}
	DbUtils.close(connection);

MapListHandler 返回多条记录

	String sql = "select * from sort";
	QueryRunner queryRunner = new QueryRunner();
	Connection connection = JDBCutil1.getConnection();
	List<Map<String,Object>> query = queryRunner.query(connection, sql, new MapListHandler());
	for (Map<String, Object> map : query) {
		for (String key : map.keySet()) {
			System.out.print(key +" "+ map.get(key));
		}
		System.out.println();
	}

三.DataSource 数据源
查询时创建和销毁连接耗费资源,使用数据源可以解决这个问题,查询时会从数据库连接池找出一个空闲的连接去查询数据库,查询完毕后不会销毁连接会重新放入连接池中

	// 创建数据库连接池
	BasicDataSource dataSource = new BasicDataSource();
	//基础设置 账号密码 数据库地址
	dataSource.setDriverClassName("com.mysql.jdbc.Driver");
	dataSource.setUrl("jdbc:mysql://localhost:3306/ldmysql01");
	dataSource.setUsername("root");
	dataSource.setPassword("123456");
	// 获取连接
	Connection connection = dataSource.getConnection();
	System.out.println(connection);

封装dataSource工具类

public class DBCPUtils {
    private static BasicDataSource source = new BasicDataSource();
    // 在静态代码块中配置池子
    static{
        source.setDriverClassName("com.mysql.jdbc.Driver");
        source.setUrl("jdbc:mysql://localhost:3306/day07");
        source.setUsername("root");
        source.setPassword("123456");
        // 池子对象初始化默认的连接对象个数
        source.setInitialSize(10);
        // 最大空闲连接个数
        source.setMaxIdle(5);
        // 最小空闲连接个数
        source.setMinIdle(2);
        // 最大活跃个数
        source.setMaxActive(8);
    }
    // 静态方法获取连接池对象
    public static DataSource getSource(){
        return source;
    }
    // 返回连接对象的方法
    public static Connection getConnection() throws SQLException{
        return source.getConnection();
    }
}
	// 通过数据库连接池创建 QueryRunner对象
	QueryRunner queryRunner = new QueryRunner(DBCPUtils.getSource());
	String sql = "select * from sort";
	List<Sort> query = queryRunner.query(sql, new BeanListHandler<>(Sort.class));
	System.out.println(query);
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值