什么是JDBC
JAVA提供访问数据库的技术
JDBC如何实现可以操作所有数据库?
JDBC提供了统一数据库的操作方式。JDBC是JAVA语言访问数据库的标准技术。提供了一组操作所有数据库的接口
接口
1 | interface MyInterface{ |
面向对象中多态
MyInterface obj = new OracleClass();
obj.save();
驱动程序
例如将数据添加到mysql数据库中,必须由mysql提供
class MySqlClass implements MyInterface{
public void save(){
//将数据保存到mysql数据中
}
}
例如将数据添加到oracle数据库中,必须由oracle提供
class OracleClass implements MyInterface{
public void save(){
//将数据保存到oracle数据中
}
}
* 1、JDBC的编码步骤
1、 加载驱动程序
2、 创建连接
3、 发送SQL INSERT UPDATE DELETE
4、 如果发送的是SELECT语句,处理结果集
5、 释放资源(关闭连接)项目中业务功能SQL
JDBC 技术标准 一组接口 数据库厂商提供驱动程序
JDBC工具类
CRUD 增删改查
模拟注册和登录,使用Statement,需要SQL与JAVA变量拼接,可能会出现SQL注入
Statement stmt = conn.createStatement();
2、预处理语句对象
PreparedStatement,预处理语句对象,发送并执行SQL语句,是Statement子接口
优点:
* 避免出现SQL注入现象
* 提升同一条SQL语句多次执行的效率
* 提升项目中SQL语句的可读性
用法:
* SQL
使用?作为变量的占位符
String sql = “SELECT * FROM ajia_user WHERE username=’”+userName+”‘ AND password=’”+password+”‘“;
String sql = “SELECT * FROM ajia_user WHERE username=? AND password=?”;
String sql
= “INSERT INTO ajia_user(id,username,password,email,phone,created,updated) “
+ “VALUES(NULL,?,?,?,?,NOW(),NOW())”;
String sql = “SELECT * FROM ajia_user WHERE id=?”;
String sql = “SELECT * FROM ajia_user”;
* 实例化:
PreparedStatement pstmt = conn.prepareStatement(String sql);
* 装载占位符(?)值
String userName = sc.nextLine();
String password = sc.nextLine();
String sql = "SELECT * FROM ajia_user WHERE username=? AND password=?";
pstmt.setString(1,userName);
pstmt.setString(2,password);
pstmt.setDouble(3,sal);
pstmt.setTimeStamp(4,t);
pstmt.setDate(5,d);
pstmt.setObject(6,);
* 执行SQL
int executeUpdate();执行已经被装载值得SQL语句
ResultSet executeQuery();3、JDBC核心API
- DriverManager,驱动程序管理器
Connection getConnection(String url,String user,String password);获取连接的方法
url:jdbc:mysql://ip:3306/tedudb
jdbc:mysql,主协议,指定调用哪个驱动程序
//ip:3306/tedudb,自协议,指定数据库服务器的ip,数据库服务器软件的端口号,数据库名 - Connection,连接对象
Statement createStatement();
PreparedStatement prepareStatement(String sql); - Statement,语句对象
int executeUpdate(String sql),执行insert,update,delete语句
ResultSet executeQuery(String sql);执行select语句 - PreparedStatement,语句处理语句对象
void setXxx(int index,Xxx value);装载占位符值
int executeUpdate(),执行insert,update,delete语句
ResultSet executeQuery();执行select语句 - 关闭连接
conn.close();
4、JDBC事务处理
事务:一组操作的逻辑单元
原子性,一致性,隔离性,持久性(ACID)
删除多条记录,修改多条记录,添加多条记录 Connection接口中:
void setAutoCommit(boolean isAuto);设置自动提交方式,JDBC中默认自动提交
boolean getAutoCommit();获取JDBC自动提交方式
void commit();提交事务
void rollback();回滚事务
需求:使用JDBC事务,处理转账
t_account:id,username,balance
create table t_account(
id int(4) auto_increment primary key,
username varchar(20),
balance double(12,2)
);
insert into t_account values(null,’1001’,100000);
insert into t_account values(null,’1002’,100000);
5、批处理
create table t_log(
id int(8) auto_increment primary key,
title varchar(20),
content varchar(50)
);
6、实体类
ajia_user
- 一组private属性
- 一组属性的setter和getter
- 重写父类equals(),hashCode(),toString()方法
- 一组构造器
- 实现SeriaLizable接口
7、DAO的设计
设计接口 实现类
接口的作用:
* 解耦 多层体系结构应用中 视图层 控制层 业务层 持久层
* 扩展功能
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
interface Hahaha{
public void f();
}
class Aaaaa implements Hahaha{
public void f(){
}//JDBC,MyBatis
}
class B{
public void f1(){
//.....
Hahaha a = 反射获取Aaaaa对象;
a.f();
}
}
JdbcUtil类:
1 | public class JdbcUtil { |
2、BaseDao设计
* 增删改方法的设计
* 查询方法的设计
ResultSet:基于连接的结果集
CacheRowSet:基于缓存的结果集
1 | public class BaseDao { |

