JDBC和数据库连接池
JDBC
定义
JDBC 规范定义接口,具体的实现由各大数据库厂商来实现。
JDBC 是 Java 访问数据库的标准规范,真正怎么操作数据库还需要具体的实现类,也就是数据库驱动。每个数据库厂商根据自家数据库的通信格式编写好自己数据库的驱动。所以我们只需要会调用 JDBC 接口中的方法即可,数据库驱动由数据库厂商提供。
使用JDBC需要的包
包名 | 说明 |
---|---|
java.sql | 所有与 JDBC 访问数据库相关的接口和类 |
java.sql | 数据库扩展包,提供数据库额外的功能。如:连接池 |
数据库的驱动 | 由各大数据库厂商提供,需要额外去下载,是对 JDBC 接口实现的类 |
JDBC的核心类
接口或类 | 作用 |
---|---|
DriverManager类 | 1) 管理和注册数据库驱动 2) 得到数据库连接对象 |
Connection 接口 | 一个连接对象,可用于创建 Statement 和 PreparedStatement 对象 |
Statement 接口 | 一个 SQL 语句对象,用于将 SQL 语句发送给数据库服务器。 |
PreparedStatemen 接口 | 一个 SQL 语句对象,是 Statement 的子接口 |
ResultSet 接口 | 用于封装数据库查询的结果集,返回给客户端 Java 程序 |
使用方法
java.sql.DriverManager
- public static Connection getConnection(String url,String user, String password): 获取连接;
- public static Connection getConnection(String url,java.util.Properties info): 获取连接。
java.sql.Connection
- Statement createStatement() throws SQLException:获取Statement对象,用于SQL语句的执行。
- PreparedStatement prepareStatement(String sql) throws SQLException: 获取PreparedStatement对象,防止sql注入;
- void setAutoCommit(boolean autoCommit) throws SQLException:开启事物;
- void commit() throws SQLException: 事物的提交;
- void rollback() throws SQLException: 出现问题,进行事物的回滚;
java.sql.Statement
- int executeUpdate(String sql) throws SQLException:用于执行增删改语句。
- ResultSet executeQuery(String sql) throws SQLException:用于执行查询的sql语句。
java.sql.PreparedStatement
- void setString(int parameterIndex, String x) throws SQLException: 设置占位符的值;
- ResultSet executeQuery() throws SQLException: 执行查询语句
- int executeUpdate() throws SQLException: 执行更新语句。
java.sql.ResultSet
- boolean next() throws SQLException:判断是否有结果集;
- long getLong(String columnLabel) throws SQLException: 以JAVA编程语言中long的形式获取此ResultSet对象的当前行中指定列的值;
- String getString(String columnLabel) throws SQLException: 以JAVA编程语言中String的形式获取此ResultSet对象的当前行中指定列的值
数据库连接池
概念:
一个容器(集合),存放数据库连接的容器。当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归还给容器。
使用方法:
javax.sql.DataSource
- Connection getConnection() throws SQLException: 从连接池中获取连接。
1: 归还连接:Connection.close()。如果连接对象Connection是从连接池中获取的,那么调用Connection.close()方法,则不会再关闭连接了。而是归还连接
2: 一般我们不去实现它,有数据库厂商来实现(C3P0,Druid)。
XFS