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:     · 作用:工具类,用来关闭资源,与事务的处理的方法。