JDBC概述
jdbc概述
JDBC从物理结构上说就是Java语言访问数据库的一套接口集合。
从本质上来说就是调用者(程序员)和实现者(数据库厂商)之间的协议。JDBC API 使得开发人员可以使用纯Java的方式来连接数据库,并进行操作。
ODBC:基于C语言的数据库访问接口。
JDBC:是Java版的ODBC。
JDBC 特性:高度的一致性、简单性(常用的接口只有4、5个)。
JDBC 编程的步骤
基本步骤:
1.加载和注册数据库驱动
2.连接数据库
3.创建Statement对象 //为了类型安全和批量更新的效率,改用PreparedStatement
4.操作数据库,执行SQL语句
5.处理数据(游标)
6.释放资源,断开与数据库的连接代码示例
public class ConnTest2 { private static final String URL = "jdbc:mysql://localhost:3306/jdbc_test"; private static final String USER = "root"; private static final String PASSWORD = "123"; public static void main(String[] args) throws ClassNotFoundException, SQLException { //加载驱动 Class.forName("com.mysql.jdbc.Driver"); //获取数据库连接 Connection conn = DriverManager.getConnection(URL,USER,PASSWORD); Statement stmt = conn.createStatement(); //通过数据库的连接操作数据库,实现对数据库的增删改查 ResultSet rs = stmt.executeQuery("SELECT user_name,age FROM person"); while(rs.next()){ System.out.println(rs.getString("user_name")+","+rs.getInt("age")); } } }但是通常情况下,为了代码复用,都会将连接语句封装成一个工具类DBUtils
package com.jdbc.utils; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; /** * 数据库连接工具类 供其他类使用 */ public class DBUtils { private static final String URL = "jdbc:mysql://localhost:3306/jdbc_test"; private static final String USER = "root"; private static final String PASSWORD = "123"; private static Connection conn = null; public static Connection getConnection() throws ClassNotFoundException, SQLException { //加载数据库驱动 Class.forName("com.mysql.jdbc.Driver"); //获取数据库连接信息 conn = DriverManager.getConnection(URL, USER, PASSWORD); //Statement stmt = conn.createStatement(); //返回数据库连接信息对外提供使用 return conn; } }
Dao层方法调用DBUtils
//删除 public void del(Person person) throws SQLException, ClassNotFoundException { Connection conn = DBUtils.getConnection(); String sql; sql = "DELETE FROM person WHERE id=?"; PreparedStatement ptmt = conn.prepareStatement(sql); ptmt.setInt(1, person.getId()); ptmt.execute(); }
JDBC几个重要接口
参考博客:
JDBC中包括了两个包:java.sql和javax.sql
java.sql 基本功能。 javax.sql 扩展功能。java.sql
这个包中的类和接口主要针对基本的数据库编程服务,如生成连接、执行语句以及准备语句和运行批处理查询等。同时也有一些高级的处理,比如批处理更新、事务隔离和可滚动结果集等
javax.sql
它主要为数据库方面的高级操作提供了接口和类。
如为连接管理、分布式事务和旧有的连接提供了更好的抽象,它引入了容器管理的连接池、分布式事务和行集等。
Statement与PreparedStatement
Statement
SQL语句执行接口,代表了一个数据库的状态,在向数据库发送相应的SQL语句时,都需要创建Statement接口或PreparedStatement接口。
在具体应用中,Statement主要用于操作不带参数(可以直接运行)的SQL语句,比如删除语句、添加或更新
PreparedStatement
Statement、PreparedStatement、CallableStatement
三种方式分析比较
1.JDBC提供了Statement、PreparedStatement 和 CallableStatement三种方式来执行查询语句,
其中 Statement 用于通用查询, PreparedStatement 用于执行参数化查询, 而 CallableStatement则是用于存储过程2.对于PreparedStatement来说,数据库可以使用已经编译过及定义好的执行计划,
由于PreparedStatement对象已预编译过,所以其执行速度要快于Statement对象。3.PreparedStatement:
可变参数的SQL,编译一次,执行多次,效率高; 支持批量更新,批量删除; 可以阻止常见的SQL注入式攻击。 PreparedStatement中,“?” 叫做占位符,一个占位符必定只能对应一个值
JDBC中Transaction编程(事务编程)
事务的特点
- 原子性(Atomicity):事务是一个完整的操作
- 一致性(Consistency):当事务完成时,数据必须处于一致状态
- 隔离性(Isolation):对数据进行修改的所有并发事务是彼此隔离的
- 永久性(Durability):事务完成时,它对数据库的修改被永久保持
JDBC替代品
主要有一下替代品
- commons-dbutils
- hibernate
- mybatis