Java 笔记八 JDBC

202 阅读4分钟

JDBC

1.概念: Java DataBase Connectivity Java 数据库连接,Java语言操作数据库
 JDBC本质: 其实是官方(sun公司)定义的一套操作关系型数据库的规则,即接口。各个数据库厂商去实现这套接口,
提供数据库驱动jar包。我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。

2.快速入门:
    步骤:
    1. 导入驱动jar包
    2. 注册驱动
    3. 获取数据库连接对象connection
    4. 定义sql
    5. 获取执行sql语句的对象statement
    6. 执行sql,接收返回结果
    7. 处理结果
    8. 释放资源
    
3. 详解各个对象
    1. DriverManager: 驱动管理对象
        功能:
            1. 注册驱动: 告诉程序该使用哪一个数据库驱动jar
            static void registerDriver(Driver driver): 注册与给定的驱动程序DriverManager
            写代码使用: Class.forName("com.mysql.jdbc.Driver")
            通过查看源码发现: 在com.mysql.jdbc.Driver类中存在静态代码块
            static {
                try {
                    java.sql.DriverManager.registerDriver(new Driver());
                } catch(SQLException e) {
                    throw new RuntimeException("Can't register driver!")
                }
            }
            注意: 在mysql5之后的驱动jar包可以省略注册驱动的步骤
            
            2. 获取数据库的连接
            public static Connection getConnection(String url, String user, String password)
            参数:
                url: 指定连接路径
                    * 语法: jdbc:mysql://ip地址(域名):端口号/数据库名称
                    * 例子: jdbc:mysql://localhost:3306/db3
                    * 细节: 如果连接的是本机mysql服务器,并且mysql服务默认端口是3306,则url可以简写为
                    jdbc:mysql:///数据库名称
                user: 用户名
                password: 密码
            
    2. Connection: 数据库连接对象
        1. 功能: 
            1. 获取执行sql的对象
                Statement createStatement()
                PreparedStatement prepareStatement(String sql)
            2. 管理事务:
                开启事务: setAutoCommit(boolean autoCommit): 调用该方法设置参数为false,即开启事务
                提交事务: commit()
                回滚事务: rollback()
    3. Statement: 执行sql的对象
            1. boolean execute(String sql): 可以执行任意的sql
            2. int executeUpdate: 执行DML(insert, update, delete)语句,DDL(create, alter, drop)语句
                返回值: 影响的行数,可以通过这个影响的行数判断DML语句是否执行成功 返回值>0执行成功,反之执行失败
            3. ResultSet executeQuery(String sql): 执行DQL(select)语句
            
4. JDBC控制事务
        1.开启事务: setAutoCommit(false)
        2.提交事务: commit()
            当所有sql都执行完提交事务
        3.回滚事务: rollback()
            在catch中回滚事务

数据库连接池

1. 概念: 其实就是一个容器(集合),存放数据库连接的容器。
        当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完后,会将连接对象归还容器。
2. 好处: 
    1. 节约资源
    2. 用户访问高效
3. 实现:
    1. 标准接口: DataSource  javax.sql包下的
        1. 方法:
            获取连接: getConnection()
            归还连接: connection.close(),如果connection对象是从数据库连接池中获取,那么connection.close()不是关闭连接,而是归还连接
    2. 一般我们不去实现它,由数据库厂商实现
        1.C3P0: 数据库连接池技术
        2.Druid:数据库连接池实现技术,由阿里巴巴提供的
        
4. C3P0: 数据库连接池技术
    步骤:
    1. 导入jar包(俩个) c3p0-0.9.5.2.jar mchange-commons-java-0.2.12.jar
    2. 定义配置文件
        名称: c3p0.properties或者c3p0-config.xml
        路径: 直接将文件放在src目录下即可
    3. 创建核心对象,数据库连接池对象 ComboPooledDataSource
    4. 获取连接: getConnection
            
5. Druid: 数据库连接池实现技术,由阿里巴巴提供的
    步骤:
        1. 导入jar包 druid-1.0.9.jar
        2. 定义配置文件:
            是properties形式的
            可以叫任意名称,可以放在任意目录下
        3. 加载配置文件。Properties
        4. 获取数据库连接池对象: 通过工厂方法来获取DruidDataSourceFactory
        5. 获取连接: getConnection

Spring JDBC

  • Spring框架对JDBC的简单封装,提供了一个JDBCTemplate对象简化JDBC的开发

    步骤:
        1. 导入jar包
        2. 创建jdbcTemplate对象。依赖于数据源DataSource
            jdbcTemplate template = new JdbcTemplate(ds);
        3.调用JdbcTemplate的方式来完成CRUD的操作
            update(): 执行DML语句。增删改语句
            queryForMap():查询结果将结果集封装为map集合,将列名作为key,将值作为value
            ,将这条记录封装为一个map集合
            注意: 这个方法查询的结果集长度只能为1
            queryForList(): 查询结果将结果集封装为list集合,注意:将每一条记录封装为一个Map集合,再将Map集合装载到List集合中
            query(): 查询结果,将结果封装为JavaBean对象
            queryForObject: 查询结果,将结果封装为对象