JDBC简介:
JDBC(Java DataBase Connectivity)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一的访问,它由一组用Java语言编写的类和接口组成。使用JDBC访问数据库的基本步骤如下:
- 加载JDBC驱动程序
- 建立数据库连接
- 创建操作数据库SQL的对象
- 执行语句并分析执行结果
- 关闭连接
操作实例:
一、操作mysql数据库
MySQL安装方法
二、下载驱动
要在程序中连接mysql数据库对其进行操作,我们还需要下载驱动Mysql-Connector/J,这是mysql为java的数据库连接开发的库,同时官网上也有类似为其他语言的库,比如Connectors/.Net , Connectors/php , Connectors/C++,下载驱动之后将驱动导入项目文件。
点击下载驱动
三、连接MySQL数据库
- 定义连接数据库的三个常量:URL、USERNAME、PASSWORD
- 定义数据库的连接对象
- 数据库连接(1、加载驱动 2、驱动管理得到数据库的连接并返回一个数据库对象)
- 关闭数据库连接
- main函数进行测试
代码如下:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DB_Helper {
public static final String URL = "jdbc:mysql://localhost:3306/company?characterEncoding=utf8&useSSL=false&serverTimezone=UTC";
public static final String USERNAME = "root";
public static final String PASSWORD = "123456";
// 定义数据库的连接对象
public static Connection conn;
// 数据库连接对象
public static Connection getConn(){
try {
// 加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");
try {
// 驱动管理得到数据库的连接并返回一个数据库对象
conn= DriverManager.getConnection(URL, USERNAME, PASSWORD);
} catch (SQLException e) {
e.printStackTrace();
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return conn;
}
// 关闭数据库连接
public static void closeConn(Connection conn){
if (conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
System.out.println(DB_Helper.getConn());
}
}
结果如下:

JDBC架构:
JDBC API支持用于数据库访问的两层和三层处理模型,但通常,JDBC体系结构由两层组成:
- JDBC API:提供应用程序到JDBC管理器连接。
- JDBC驱动程序API:支持JDBC管理器到驱动程序连接。
以下是架构图,它显示了驱动程序管理器相对于JDBC驱动程序和Java应用程序的位置:
JDBC操作数据库实例:
一、在MySQL数据库中构建一个表
二、编写程序
- 创建mysql_conn,存放DB_Helper类,用来连接数据库
- 创建entity包,存放Emp类,作为用户的实体类
- 创建dao包,存放Emp_dao接口,用来定义方法
- 创建dao_impl包,存放接口的实现类Emp_impl
- 创test包,存放Test测试类
一、DB_Helper类
详细见上方mysql数据库
二、Emp类
// 用户的实体类
public class Emp {
private int empno;
private String ename;
private String job;
private String mgr;
public int getEmpno() {
return empno;
}
public void setEmpno(int empno) {
this.empno = empno;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public String getMgr() {
return mgr;
}
public void setMgr(String mgr) {
this.mgr = mgr;
}
// 定义有参的构造方法
public Emp(int empno, String ename, String job, String mgr) {
super();
this.empno = empno;
this.ename = ename;
this.job = job;
this.mgr = mgr;
}
// 有参的构造方法(empon是自增,不用进行赋值)
public Emp(String ename, String job, String mgr) {
super();
this.ename = ename;
this.job = job;
this.mgr = mgr;
}
// 定义无参的构造方法
public Emp() {
super();
}
}
三、Emp_dao 接口
public interface Emp_dao {
// 查询所有的用户信息,并返回
public List<Emp> findAllUser();
// 查询某个用户的信息并返回
public Emp findUserById(int id);
}
四、Emp_impl实现类
import dao.Emp_dao;
import entity.Emp;
import mysql_conn.DB_Helper;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class Emp_impl implements Emp_dao {
// 定义查询所有用户信息的实现类
@Override
public List<Emp> findAllUser() {
List<Emp> lists = new ArrayList<Emp>();
// 1、获得数据库的连接对象
Connection conn = DB_Helper.getConn();
// 2、书写SQL语句操作数据表
String sql = "select * from emp";
// 3、预编译SQL语句
try {
PreparedStatement pps = conn.prepareStatement(sql);
// 4、执行查询命令
ResultSet resultSet = pps.executeQuery();
// 5、循环读取结果集中的数据
while (resultSet.next()){ // 如果结果集中有数据返回true
// 6、 把结果集中的数据读取出来赋值给用户的属性
Emp emp = new Emp();
emp.setEmpno(resultSet.getInt(1));
emp.setEname(resultSet.getString(2));
emp.setJob(resultSet.getString(3));
emp.setMgr(resultSet.getString(4));
lists.add(emp);
}
} catch (SQLException e) {
e.printStackTrace();
}
return lists;
}
// 定义查询某个用户信息的实现类
@Override
public Emp findUserById(int id) {
Emp emp = null;
// 1、获得数据库的连接对象
Connection conn = DB_Helper.getConn();
// 2、书写SQL语句操作数据表
String sql = "select * from emp WHERE empno=?";
// 3、预编译SQL语句
try {
PreparedStatement pps = conn.prepareStatement(sql);
// 4、给SQL语句占位符赋值
pps.setInt(1,id);
// 5、执行查询命令
ResultSet resultSet = pps.executeQuery();
// 6、循环读取结果集中的数据
while (resultSet.next()){ // 如果结果集中有数据返回true
// 7、 把结果集中的数据读取出来赋值给用户的属性
emp = new Emp();
emp.setEmpno(resultSet.getInt(1));
emp.setEname(resultSet.getString(2));
emp.setJob(resultSet.getString(3));
emp.setMgr(resultSet.getString(4));
}
} catch (SQLException e) {
e.printStackTrace();
}
return emp;
}
}
五、Test测试类
public class Test {
public static void main(String[] args) {
// 查询到所有的用户
Emp_impl eil = new Emp_impl();
List<Emp> lists = eil.findAllUser();
for (Emp emp : lists) {
System.out.println(emp.getEmpno()+"\t"+emp.getEname()+"\t"+emp.getJob()+"\t"+emp.getMgr());
}
// 查询到单个用户
Scanner scanner = new Scanner(System.in);
System.out.println("请输入想要查询的编号:");
int number = scanner.nextInt();
Emp user = eil.findUserById(number);
if (user!=null){
System.out.println(user.getEmpno() + "\t" + user.getEname() + "\t" + user.getJob() + "\t" + user.getMgr());
}
}
}
结果如下: