JAVA DataBase Connectivity Java数据库连接技术。
1. JDBC的本质
jdbc是官方(sun公司)定义的一套操作所有关系型数据库的规则(接口),各个数据库厂商提供数据库驱动jar包。
总结:
在java中访问数据库只能通过JDBC。 JDBC是java访问数据库的基础,其他数据库访问技术(MyBatis)都是对JDBC的封装 JDBC是为了访问不同的数据库,提供了一种统一的访问方式。 JDBC本身是java连接数据库的一个标准,是进行数据库连接的抽象层.由java编写的一组类和接口,接口的实现由各大数据库厂商来实现
2. JDBC实现步骤
1、加载驱动 2、连接数据库 3、创建statement对象 4、发送sql 5、处理结果集 6、关闭连接
3. 准备
3.1 数据库准备
1、准备数据库
-- 创建数据库,设置编码格式为utf8
CREATE DATABASE test_jdbc character SET utf8;
2、准备表,数据
-- 使用test_jdbc数据库
use test_jdbc;
-- 创建表
CREATE TABLE t_user (
id int(11) NOT NULL AUTO_INCREMENT,
username varchar(25) DEFAULT NULL,
password varchar(25) DEFAULT NULL,
age int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 准备数据
insert into t_user(id,username,password,age(1,'一一','yiyi',11);
insert into t_user(id,username,password,age(2,'二二','erer',22);
insert into t_user(id,username,password,age(3,'三三','sansan',33);
3、准备MySQL的驱动jar包
链接:https://pan.baidu.com/s/1770JZCpQqWDv5oCxBlSIIQ 提取码:2fom
4、准备junit包
链接:https://pan.baidu.com/s/1sZ4fD7ynjI5l1MOZIRfGCQ 提取码:1b3s
3.2 idea项目准备
1、创建项目一个java项目
2、在项目下新建一个lib文件夹,用来专门存放jar包
3、把jar复制到lib文件下,引用jar包
3.1、方式一
3.2方式二
4成功效果,有箭头
- 在src下见test(随意)包,包下建JdbcTest类(名字随便取,不能是Test) ```java package test;
public class JdbcTest { }
<a name="rGX2H"></a>
## 4. 查询
按实现步骤来
```java
package test;
import org.junit.Test;
import java.sql.*;
public class JdbcTest {
/**
* jdbc查询操作
*/
@Test
public void insertTest() throws ClassNotFoundException, SQLException {
// 1、加载驱动,异常抛出,固定格式,和MySQL的驱动jar版本匹配
Class.forName("com.mysql.jdbc.Driver");
// 2、连接数据库,固定格式,连接本地3306端口的MySQL的test_jdbc数据库,设置编码和时区
String url = "jdbc:mysql://localhost:3306/test_jdbc?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC";
// MySQL用户名
String user = "root";
// MySQL密码
String password = "root";
// 调方法,连接数据库
Connection conn = DriverManager.getConnection(url, user, password);
// 3、创建statement对象,这个对象是可以发送sql语句
Statement statm = conn.createStatement();
//4、发送sql,调用executeQuery()方法
String sql = "select * from t_user";
// 返回的是一个ResultSet 集合
ResultSet rs = statm.executeQuery(sql);
//5、处理结果集
//指针一个一个的去找,如果找到就取出
while (rs.next()) {
// 1、按字段名来取,比较真观,推荐使用(常用),
// int类型调用getInt()方法
int id = rs.getInt("id");
String username = rs.getString("username");
String passworld1 = rs.getString("password");
int age = rs.getInt("age");
/*
int id = rs.getInt(1);//表示第一列id字段
String username = rs.getString(2);//表示第二列username字段
String passworld2 = rs.getString("passworld");
int age = rs.getInt("age");
*/
System.out.println(id + "-" + username + "-" + password1 + "-" + age);
}
// 6、关闭连接 后打开的先关闭
rs.close();
statm.close();
conn.close();
}
5. 添加
/**
* jdbc实现添加操作
*/
@Test
public void TestAddUser() throws Exception {
// 1、加载驱动,异常抛出,固定格式,和MySQL的驱动jar版本匹配
Class.forName("com.mysql.jdbc.Driver");
// 2、连接数据库,固定格式,连接本地3306端口的MySQL的test_jdbc数据库,设置编码和时区
String url = "jdbc:mysql://localhost:3306/test_jdbc?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC";
// MySQL用户名
String user = "root";
// MySQL密码
String password = "root";
// 调方法,连接数据库
Connection conn = DriverManager.getConnection(url, user, password);
//3、创建statement对象
Statement stmt = conn.createStatement();
//4、发送sql 添加,修改,删除 都用executeUpdate()方法
String sql = "INSERT INTO t_user(id,username,password,age) VALUES (null, 'rose', '123', 97)";
int i = stmt.executeUpdate(sql);
//表示的影响的行数
System.out.println(i);
//5、关闭连接
stmt.close();
conn.close();
}
6. 删除
/**
* jdbc实现删除操作
*/
@Test
public void TestDeleteUser() throws Exception {
// 1、加载驱动,异常抛出,固定格式,和MySQL的驱动jar版本匹配
Class.forName("com.mysql.jdbc.Driver");
// 2、连接数据库,固定格式,连接本地3306端口的MySQL的test_jdbc数据库,设置编码和时区
String url = "jdbc:mysql://localhost:3306/test_jdbc?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC";
// MySQL用户名
String user = "root";
// MySQL密码
String password = "root";
// 调方法,连接数据库
Connection conn = DriverManager.getConnection(url, user, password);
// 3、创建statement对象
Statement stmt = conn.createStatement();
// 4、发送sql
String sql="delete from t_user";
int i = stmt.executeUpdate(sql);
System.out.println(i);
// 5、关闭连接
stmt.close();
conn.close();
}
7. 修改
/**
* jdbc实现修改操作
*/
@Test
public void TestUpdateUser() throws Exception {
// 1、加载驱动,异常抛出,固定格式,和MySQL的驱动jar版本匹配
Class.forName("com.mysql.jdbc.Driver");
// 2、连接数据库,固定格式,连接本地3306端口的MySQL的test_jdbc数据库,设置编码和时区
String url = "jdbc:mysql://localhost:3306/test_jdbc?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC";
// MySQL用户名
String user = "root";
// MySQL密码
String password = "root";
// 调方法,连接数据库
Connection conn = DriverManager.getConnection(url, user, password);
// 3、创建statement对象
Statement stmt = conn.createStatement();
// 4、发送sql
String sql="update t_user set username ='张三' where id = 3 ";
int i = stmt.executeUpdate(sql);
System.out.println(i);
// 5、关闭连接
stmt.close();
conn.close();
}
8. 异常的处理,以添加为例
@Test
public void TestSelect(){
// 1、加载驱动
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
// 2、连接数据库
String url = "jdbc:mysql://localhost:3306/test_jdbc?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC";
String user = "root";
String password = "root";
Connection conn = null;
Statement statm = null;
ResultSet rs = null;
try {
conn = DriverManager.getConnection(url, user, password);
statm = conn.createStatement();
//4、发送sql
String sql="select * from t_user";
rs = statm.executeQuery(sql);
//5、处理结果集
while (rs.next()){
int id = rs.getInt(1);
String username = rs.getString(2);
String passworld2 = rs.getString("password");
int age = rs.getInt("age");
System.out.println(id+"-"+username+"-"+passworld2+"-"+age);
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
// 6、关闭连接 后打开的先关闭
try {
if(rs != null){
rs.close();
//关闭连接,给赋值null,gc垃圾回收回机制会优先处理这些对象
rs =null;
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(statm != null){
statm.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(conn != null){
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}