JDBC(Java Data Base Connectivity) 是 Java 访问数据库的标准规范.是一种用于执行SQL语句的Java API,可以为 多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。是Java访问数据库的标准规范
JDBC是接口,驱动是接口的实现,没有驱动将无法完成数据库连接,从而不能操作数据库!每个数据库厂商都需 要提供自己的驱动,用来连接自己公司的数据库,也就是说驱动一般都由数据库生成厂商提供。
JDBC使用
- 注册驱动
- 获得连接
- 获取语句执行平台 获取Statement对象
- 处理结果集(只在查询时处理)
- 释放资源
注册驱动
- JDBC规范定义驱动接口:
java.sql.Driver
- MySql驱动包提供了实现类:
com.mysql.jdbc.Driver
加载注册驱动 Class.forName(数据库驱动实现类)
获得连接
- Connection 接口,代表一个连接对象 ,具体的实现类由数据库的厂商实现
- 使用 DriverManager类的静态方法,getConnection可以获取数据库的连接
获取连接的静态方法 Connection getConnection(String url, String user, String password)
获取语句执行平台
- 通过Connection 的 createStatement方法 获取sql语句执行对象
创建 SQL语句执行对象 Statement createStatement()
- Statement : 代表一条语句对象,用于发送 SQL 语句给服务器,用于执行静态 SQL 语句并返回它所生成结 果的对象。
执行insert update delete语句 返回受影响的行数 int executeUpdate(String sql)
执行select语句, 返回ResultSet结果集对象 ResultSet executeQuery(String sql)
处理结果集
- 只有在进行查询操作的时候, 才会处理结果集
ResultSet接口
- 封装数据库查询的结果集,对结果集进行遍历,取出每一条记录 集合
boolean next() 游标向下一行 还有下一条记录,返回 true,否则返回 false
xxx getXxx( String or int) 通过列名,参数是 String 类型 通过列号,参数是整数
释放资源
- 需要释放的对象:ResultSet 结果集,Statement 语句,Connection 连接
- 先开的后关,后开的先关。ResultSet ==> Statement ==> Connection
JDBC工具类
-
可以把几个字符串定义成常量:用户名,密码,URL,驱动类
-
得到数据库的连接:getConnection()
-
关闭所有打开的资源
public class DBUtils { public static DataSource dataSource; public static String DRIVERNAME = ""; public static String URL = ""; public static String USER = ""; public static String PASSWORD = ""; static { try { // 注册驱动 Class.forName(DRIVERNAME); } catch (Exception e) { e.printStackTrace(); } } // 获取链接 public static Connection getConnection() { Connection connection = null; try { connection = DriverManager.getConnection(URL, USER, PASSWORD); } catch (SQLException e) { e.printStackTrace(); } return connection; } // 关闭资源 public static void close(Connection con, Statement statement, ResultSet resultSet){ if(con != null && statement != null && resultSet != null){ try { resultSet.close(); statement.close(); con.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
预处理对象
PreparedStatement
PreparedStatement 是 Statement 接口的子接口,继承于父接口中所有的方法。它是一个预编译的 SQL 语句对象
预编译: 是指SQL 语句被预编译,并存储在 PreparedStatement 对象中。然后可以使用此对象多次高效地执行该语句
PreparedStatement 特点
- 因为有预先编译的功能,提高 SQL 的执行效率
- 可以有效的防止 SQL 注入的问题,安全性更高
PreparedStatement对象使用
PreparedStatement prepareStatement(String sql) 指定预编译的 SQL 语句 SQL 语句中使用占位符 ? 创建一个语句对象
int executeUpdate() 执行insert update delete语句
ResultSet executeQuery() 执行select语句. 返回结果集对象 Resulet
PreparedStatement的步骤
编写 SQL 语句,未知内容使用?占位
"SELECT * FROM jdbc_user WHERE username=? AND password=?";
获得 PreparedStatement 对象
Connection connection = JDBCUtils.getConnection()
Statement statement = connection.createStatement()
void setXxx(int parameterIndex, Xxx x) 将指定参数设置为给定 Xxx 类型的值
数据库连接池
实际开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程,为了解决此类性能问题,通常情况我们 采用连接池技术,来共享连接Connection。这样我们就不需要每次都创建连接、释放连接了,这些操作都交给了连接池
用池来管理Connection,这样可以重复使用Connection。 当使用完Connection后,调用Connection的 close()方法也不会真的关闭Connection,而是把Connection“归还”给池
用数据库连接池
Java为数据库连接池提供了公共的接口:javax.sql.DataSource,各个厂商需要让自己的连接池实现这个接口
常见的连接池有 DBCP连接池, Druid连接池
DBCP连接池
public class DBCPUtils {
public static final String DRIVERNAME = "";
public static final String URL = "";
public static final String USERNAME = "";
public static final String PASSWORD = "";
public static BasicDataSource dataSource = new BasicDataSource();
static{
dataSource.setDriverClassName(DRIVERNAME);
dataSource.setUrl(URL);
dataSource.setUsername(USERNAME);
dataSource.setPassword(PASSWORD);
}
}
Druid连接池
导入配置文件
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/db5?characterEncoding=UTF-8
username=root
password=123456
initialSize=5
maxActive=10
maxWait=3000
public class DruidUtils {
public static DataSource dataSource;
static{
try {
Properties p = new Properties();
InputStream inputStream = DruidUtils.class.getClassLoader().getResourceAsStream("druid.properties");
p.load(inputStream);
dataSource = DruidDataSourceFactory.createDataSource(p);
} catch (Exception e) {
e.printStackTrace();
}
}
}
常见配置项
driverClassName 数据库驱动名称
url 数据库地址
username 用户名
password 密码
maxActive 最大连接数量
maxIdle 最大空闲连接
minIdle 最小空闲连接
initialSize 初始化连接
JavaBean组件
JavaBean 就是一个类, 开发中通常用于封装数据
- 需要实现序列化接口, Serializable
- 提供私有字段: private 类型 变量名;
- 提供 getter 和 setter
- 提供 空参构造