JDBC

 

关于JDBC
··· 概念:
    · JDBC是java数据库连接的一套标准规范,可以用一套API统一操作各种数据库。
··· 关系:
    · java.sql.*中定义的是一套接口,各大数据库厂商提供的驱动来实现这个接口,从而达到兼容。
 
1,使用JDBC
··· 使用步骤:
    1,注册驱动。将驱动jar包加载到JVM,Class.forName("com.mysql.jdbc.Driver");
    2,创建连接。根据驱动创建数据库连接,DriverManager.getConnection(url, name, pwd);
    3,创建执行语句的Statement。conn.createStatement();
    4,执行SQL,获得结果。statement.execute(sql);
    5,处理结果。
    6,关闭资源。
··· 注意事项:
    · 从jdk5之后就不需要注册驱动了,DriverManager会自己到CLASSPATH中找驱动。
    · MySQL5的驱动是com.mysql.jdbc.Driver,MySQL6及以上是com.mysql.cj.jdbc.Driver。
    · MySQL6及以上版本的连接url中要加时区,?serverTimezone=Asia/Shanghai,否则报错。
    · 当数据库连接对象不再被引用时,也会被GC回收,但是GC回收的只是JVM内存中的连接对            象资源,而连接对象所关联的系统资源是不能被GC回收的,所以必须调用close()方法来关            闭系统资源。对于mysql数据库,在JVM退出后socket断开,服务器端会关闭数据库连接。
 
2,Statement
··· 作用:由数据库连接创建,用来执行SQL语句。
··· 实例方法:
    · executeQuery(sql):用来执行查询语句,select。返回ResultSet类型的结果。
    · executeUpdate(sql):用来执行更新语句,insert、update和delete。并返回影响的行数。
    · execute(sql):可以执行上面两种类型语句,如果是select返回true。不推荐使用。
··· PreparedStatement:
    · 预编译的Statement,可以完全避免SQL注入。推荐使用。
    · 先编写SQL语句,并用?作为占位符;预编译后,再通过setObject()设置?占位符的传参数。
 
3,ResultSet
··· 作用:select语句返回的结果集类型。
··· 注意事项:
    · getObject(String name);是根据select中列的别名来获取数据。
    · 当调用ResultSet的close()方法后,不能再调用next()方法访问其中的数据。
 
4,JDBC控制事务
··· 概念:MySQL默认自动提交事务,即每条语句就是一个事务。 
··· 使用步骤:
    1,将connection的自动提交设为false。conn.setAutoCommit(false);
    2,手动提交事务。conn.commit();
    3,如果异常就回滚。conn.rollback();
 
5,DBCP数据库连接池
··· 作用:解决建立数据库连接需要消耗很多资源和时间的问题,可以提高性能。
··· DBCP:
    · 准备:commons-pool.jar、commons-dbcp.jar;配置文件:dbcp.properties。
    · 使用步骤:
        1,加载配置文件:properties.load("dbcp.properties");
        2,初始化DataSource:BasicDataSourceFactory.createDataSource(properties);
        3,获得Connection:dataSource.getConnection();
··· 注意事项:
    · 自定义数据库连接池要实现javax.sql.DataSource接口。
 
6,DBUtils
··· 作用:DBUtils是数据库操作实用工具,封装了对JDBC的操作。类似于ORM框架。
··· 优点:
    · 对于数据表读操作,可以把结果转换为List,Array,Set等java集合,方便操作。
    · 对于写操作也变得简单,只需要写SQL。
    · 可以通过数据库连接池来优化性能(连接复用)。
··· 三个核心对象:QueryRunner类,ResultSetHandler接口,DBUtils类。
··· QueryRunner:
    · 作用:提供对sql语句操作的API。导入commons-dbutils.jar
    · 例子:QueryRunner queryRunner = new QueryRunner(dataSource);
    · query():用来执行select操作。
    · update():用来执行insert,update,delete操作。
    · batch():批操作。
··· ResultSetHandler:
    · 作用:用于select操作后,怎么封装结果集。
    · 例子:Cat cat = queryRunner.query(sql, new BeanListHandler<>(Cat.class));
··· DBUtils:
    · 作用:工具类,用来关闭资源,与事务的处理的方法。

 

posted @ 2020-03-11 23:43  平凡的神灯  阅读(111)  评论(0编辑  收藏  举报