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、准备数据库
-- 创建数据库,设置编码格式为utf8CREATE 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. 查询按实现步骤来```javapackage test;import org.junit.Test;import java.sql.*;public class JdbcTest {/*** jdbc查询操作*/@Testpublic 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实现添加操作*/@Testpublic 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实现删除操作*/@Testpublic 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、发送sqlString sql="delete from t_user";int i = stmt.executeUpdate(sql);System.out.println(i);// 5、关闭连接stmt.close();conn.close();}
7. 修改
/*** jdbc实现修改操作*/@Testpublic 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、发送sqlString sql="update t_user set username ='张三' where id = 3 ";int i = stmt.executeUpdate(sql);System.out.println(i);// 5、关闭连接stmt.close();conn.close();}
8. 异常的处理,以添加为例
@Testpublic 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、发送sqlString 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();}}}
