JDBC知识点汇总

概述

JDBC作为java程序与数据库相连接的中间技术,主要实现通过java代码实现对数据库的增删改查操作,不考虑封装的情况下,底层JDBC的实现主要是对于DAO的理解,总体来说无非以下几个步骤:
1.导驱动包到当前工程的lib下
2.建立连接
3.增删改查
4.关闭连接

下面就以上几点分别进行总结

1.导驱动包到当前工程的lib下

JDBC存在的意义主要是解决了以往java程序员在操作不同数据库时,由于数据库的不同因而操作也会不同,这就要求程序员操作某一数据库前需要对某一数据库事先了解后才能进行相关操作,而JDBC提供了一种规范,也叫接口,不同的数据库厂商正对此接口去编写操作自己数据库的实现方法,将这些方法打包成驱动,以便JDBC调用,所以操作不同的数据库前请先去对应官网下载对应驱动导入即可。

2.建立连接

2.1 底层实现

读取配置文件,注册、加载驱动通过DriverManner获取连接,较为麻烦

2.2 使用数据库连接池

2.2.1C3P0连接池

public void C3p0Test2() throws SQLException {
        ComboPooledDataSource co = new ComboPooledDataSource("hellc3p0");//获取数据源
        Connection connection = co.getConnection();
        System.out.println(connection);
    }
    //其中hellc3p0为对应数据库的xml文件,类似properties文件

2.2.2 dbcp连接池

public void dbcpTest2() throws Exception {
        Properties ps = new Properties();
        InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("dbcp.properties");
        ps.load(is);
        DataSource dataSource = BasicDataSourceFactory.createDataSource(ps);//获取数据源
        Connection connection = dataSource.getConnection();
        System.out.println(connection);
    }

2.2.3 Druid连接池

public void DruidTest() throws Exception {
        Properties ps = new Properties();
        InputStream inputStream = new FileInputStream(new File("src/druid.properties"));
        ps.load(inputStream);

        DataSource dataSource = DruidDataSourceFactory.createDataSource(ps);//获取数据源
        System.out.println(dataSource.getConnection());
    }

总结:获取链接步骤都是1.读配置文件 2.获取数据源 3.获取链接

3.增删改查

3.1 底层实现(BaseDAO)

BaseDAO中封装了可能对数据库进行操作的泛型方法一边操作不同数据表
操作数据库前需要自己书写对应的增删改查方法,大体流程就是:
1.获取链接
2.书写sql语句
3.获取对应preparestatement
4.进行update/query操作得到结果
5.返回结果
比较繁杂

3.2 通过QueryRunner封装的各类方法实现

1.增删改操作
在这里插入图片描述
参数说明:
connection:传入一个连接(连接池获取)
sql:对应的sql语句
object…params:sql语句占位符填充参数
返回值:受影响的行数

2.查询操作
在这里插入图片描述
参数说明:
同上,其中:
ResuleSetHander:是一个接口,它有以下实现类
在这里插入图片描述
举起中的BeanHander来说,创建一个此实现类的对象,构造器中必要参数为实体类Bean,请看query源码:

public <T> T query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params) throws SQLException {
        PreparedStatement stmt = null;
        ResultSet rs = null;
        Object result = null;

        try {
            stmt = this.prepareStatement(conn, sql);
            this.fillStatement(stmt, params);
            rs = this.wrap(stmt.executeQuery());
            result = rsh.handle(rs);//这里调用了ResuleSetHander某一实现类的handle方法,rs为以及查询出来的结果集,handle方法将会结合调用它的对象的类型选择返回值返回的类型(比如是ArrayListHander那么就返回一个list,比如是BeadHander,就返回对应的实体类对象)
        } catch (SQLException var33) {
            this.rethrow(var33, sql, params);
        } finally {
            try {
                this.close(rs);
            } finally {
                this.close((Statement)stmt);
            }
        }

        return result;
    }

查询演示

public void testQuery2() {
		Connection conn = null;
		try {
			QueryRunner runner = new QueryRunner();
			conn = JDBCUtils.getConnection3();
			String sql = "select id,name,email,birth from customers where id < ?";
			
			BeanListHandler<Customer>  handler = new BeanListHandler<>(Customer.class);

			List<Customer> list = runner.query(conn, sql, handler, 23);
			list.forEach(System.out::println);
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			
			JDBCUtils.closeResource(conn, null);
		}
		
	}

4.关闭连接

3.1底层实现

分别调用使用资源的close方法

通过Dbutils工具类

在这里插入图片描述

总结

1.三大连接池技术替代了原始通过手写注册、加载驱动的方式获取链接
2.QueryRunner实现类封装了各类增删改查方法,理解ResultSetHander接口是最重要的
3.DButils类封装了关闭连接操作

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值