本文是小白文,适合进行JDBC了解引入,对于有基础的同学可以进一步了解PreparedStatement的使用 & 注入问题
JDBC全称为:Java DataBase Connectivity(java数据库连接)。
作用:jdbc 解决了 java和数据兼容性的交互 简化了开发步骤
文章目录
1. JDBC驱动
-
sun 公司制定了连接数据库的标准(jdbc接口),规范
-
其他的厂商自己实现jdbc接口连接自己的数据库的api
2. JDBC接口(API)体系
说明 | |
---|---|
DriverManager | 驱动管理 |
Connection | 数据库连接接口(会话) |
Statement | 发送sql到数据库的指令 |
ResultSet | 查询操作后 返回的结果集 |
3. jdbc的驱动的下载
-
去官网下载
-
maven仓库下载 https://mvnrepository.com/
- 创建一个java项目
- 在java项目下面创建
lib
文件夹 - 把下载好的
jar
添加到lib
中 - 把jar和java项目进行关联
4. 操作步骤
- 获取
connection
数据库连接对像- 通过
connection
获取sql发送对象- 准备
sql
- 执行
sql
- 处理执行数据库响应结果
- 释放资源
4.1 Connection 连接数据库的接口
- 常用方法
说明 | |
---|---|
colse() | 立即释放此Connection对象的数据库和JDBC资源 |
createStatement() | 创建一个statament对象 |
preparedStatement() | 创建一个PreparedStatement对象来将参数化的SQL语句发送到数据库 |
commit() | 事务提交 |
getAutoCommit() | 设置事务提交方式 |
rollback() | 事务回滚 |
- 创建connection数据库对象
/**
* 封装 conn 的获取
* @return
*/
public static Connection getConn() {
// 通过DriverManager 获取连接 返回一个conn 连接
String url = "jdbc:oracle:thin:@localhost:1521:orcl";
String user = "scott";
String password = "tiger";
Connection conn = null;
try {
// 获取连接
return conn = DriverManager.getConnection(url, user, password);
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
- 数据库URL解析
4.2 Statement
用于执行静态
SQL
语句并返回它所生成结果的对象。发送sql到数据库,返回结果
- 常用方法
说明 | |
---|---|
addBatch(String sql) | 将给定的SQL命令添加到此Statement对象的当前命令列表中 |
int executeUpdate(String sql) | 执行给定SQL语句,该语句可能为 INSERT 、UPDATE 或 DELETE 语句或者不返回任何内容的SQL语句插入一条数据 : 插入成功:数据库多了一条记录,返回1(返回值数据库响应的行数) 插入失败:数据库没有发生改变,返回0 |
executeQuery(String sql) | 执行sql的查询语句,返回结果集 |
exceteBatch() | 将一批命令提交给数据库来执行, 如果全部命令执行成功,则返回更新计数组成的数组(批处理) |
close() | 释放资源 |
- 通过
connection
获取sql发送对象
// 获取一个发送sql到数据库类
// 创建一个发送sql到数据库的对象
Statement st = null;
try {
st = conn.createStatement();
// 更新操作 (insert uopate delete )
// 准备sql
String sql = "insert into t_person(id,name,age) values (34,'郭靖',40)";
// executeUpdate:把sql发送到数据执行返回结果
int update = st.executeUpdate(sql);
if (update > 0) { // 判断是否有响应
System.out.println("添加成功");
} else {
System.out.println("添加失败");
}
} catch (SQLException e) {
e.printStackTrace();
}
4.3 ResultSet
表示数据库结果集的数据表
ResultSet接口提供用于从当前行获取,列值的获取
- ResultSet对象具有指向其当前数据行的光标。最初,光标被置于第一行之前。
- 常用方法
说明 | |
---|---|
next() | 光标的移动释放数据 |
colse() | 关闭方法(释放资源) |
获取方法 index :列的索引从1开始从左往右读取只能读取一次 colunmName:列的名称 | JDBC 驱动程序尝试将底层数据转换为在获取方法中指定的 Java 类型, 并返回适当的 Java 值 |
getInt(index / colunmName) | 获取int值 jdbc驱动会把我们数据的数据类型转成java数据类型 number --> int |
getString(index / colunmName) | 获取的string值 jdbc驱动会把我们的数据数据类型转成java数据类型 varchar2 --> String |
- ResultSet的使用
// 获取st
Statement st = null;
ResultSet rs = null;
try {
st = conn.createStatement();
// 准备SQL
String sql = "select * from t_person";
// 执行sql:executeUpdate()
// 查询执行:executeQuery()
rs = st.executeQuery(sql);
// 判断是否有数据next()判断是否有下一行
while (rs.next()) {
// 通过列名索引获取数据
// int id = rs.getInt(1);
// String name = rs.getString(2);
// int age = rs.getInt(3);
// 通过列名获取
int id = rs.getInt("id");
String name = rs.getString("name");
int age = rs.getInt("age");
System.out.println(id + "\t" + name + "\t" + age);
}
}
4.4 增删改查的使用
public class Demo {
@Test
public void demo01() {
// 获取connection数据库对象
Connection conn = jdbcUtils.getConn();
// 获取发送sql的类
Statement st = null;
try {
st = conn.createStatement();
// 获取sql
String sql = "insert into t_table(id,name,age) values (1,'Tom',19)";
// 执行sql
int update = st.executeUpdate(sql);
// 判断是否发送成功
if (update > 0) {
System.out.println("加载成功");
} else {
System.out.println("加载失败");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
//释放资源
jdbcUtils.close(conn, st);
}
}
/**
* 修改数据
*/
@Test
public void demo02() {
//获取connection
Connection conn = jdbcUtils.getConn();
//获取sql发送类
Statement st = null;
try {
st = conn.createStatement();
//获取sql
String sql = "update t_table set id = 2, name = 'John', age = 20 where id = 1 ";
//执行sql
int update = st.executeUpdate(sql);
//判断发送情况
if (update > 0) {
System.out.println("发送成功");
} else {
System.out.println("发送失败");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
//释放资源
jdbcUtils.close(conn, st);
}
}
/**
* 删除数据
*/
@Test
public void demo03() {
//安装驱动
Connection conn = jdbcUtils.getConn();
//获取发送sql类
Statement st = null;
try {
st = conn.createStatement();
//获取sql
String sql = "delete from t_table where id = 2";
//执行sql
int update = st.executeUpdate(sql);
//判断是否执行成功
if (update > 0) {
System.out.println("删除成功");
}
} catch (SQLException e) {
e.printStackTrace();
}
//释放资源
jdbcUtils.close(conn, st);
}
/**
* 查询数据
*/
@Test
public void demo04() {
//获取连接connection数据库连接对象
Connection conn = jdbcUtils.getConn();
//通过conn获取sql发送对象
ResultSet rt = null;
Statement st = null;
try {
st = conn.createStatement();
//获取sql
String sql = "select * from emp";
//执行sql
rt = st.executeQuery(sql);
//判断是否有数据
while (rt.next()) {
int empno = rt.getInt("empno");
String ename = rt.getString("ename");
String job = rt.getString("job");
System.out.println(empno + "\t" + ename + "\t" + job);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
jdbcUtils.close(conn, st, rt);
}
}
}
- jdbcUtil工具包
public class jdbcUtils {
static {
// 1.安装驱动
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static Connection getConn() {
// 2.通过驱动管理获取连接接口
String url = "jdbc:oracle:thin:@localhost:1521:orcl";
String user = "scott";
String password = "tiger";
Connection conn = null;
try {
conn = DriverManager.getConnection(url, user, password);
System.out.println(conn);
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
public static void close(Statement st, Connection conn) {
// 5.释放资源
if (st != null) {
try {
st.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 先开后关原则(栈原则)
**/
public static void close(ResultSet rt, Statement st, Connection conn) {
// 5.释放资源
if (st != null) {
try {
st.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (rt != null) {
try {
rt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}