JDBC的相关实例
JDBC简介:
JDBC(Java DataBase Connectivity)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一的访问,它由一组用Java语言编写的类和接口组成。使用JDBC访问数据库的基本步骤如下:
- 加载JDBC驱动程序
- 建立数据库连接
- 创建操作数据库SQL的对象
- 执行语句并分析执行结果
- 关闭连接
JDBC架构:
JDBC API支持用于数据库访问的两层和三层处理模型,但通常,JDBC体系结构由两层组成:
- JDBC API:提供应用程序到JDBC管理器连接。
- JDBC驱动程序API:支持JDBC管理器到驱动程序连接。
以下是架构图,它显示了驱动程序管理器相对于JDBC驱动程序和Java应用程序的位置:
操作实例:
一、操作MySQL数据库
二、下载驱动
要在程序中连接mysql数据库对其进行操作,我们还需要下载驱动Mysql-Connector/J,这是mysql为java的数据库连接开发的库,同时官网上也有类似为其他语言的库,比如Connectors/.Net , Connectors/php , Connectors/C++,下载驱动之后将驱动导入项目文件。
三、连接MySQL数据库
1.定义连接数据库的三个常量:URL、USERNAME、PASSWORD
2.定义数据库的连接对象
3.数据库连接(1、加载驱动 2、驱动管理得到数据库的连接并返回一个数据库对象)
4.关闭数据库连接
5.main函数进行测试
连接数据库的代码如下:
package cn.zbw.Mysql;
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 PWD="123456";
// 定义连接的方法
public static Connection conn;
public static Connection getConn(){
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
conn = DriverManager.getConnection(URL,USERNAME,PWD);
} catch (SQLException 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(getConn());
}
}
结果是:
这就说明成功连接数据库!
JDBC操作数据库的实例:
1.在数据库中首先建一个表:
2.编写程序:
- 创建mysql包,存放DB_Helper类,用来连接数据库
- 创建Entity包,存放Emp类,作为用户的实体类
- 创建Dao包,存放EmpDao接口,用来定义方法
- 创建Dao_Impl包,存放接口的实现类EmpDaoImpl
- 创 Test包,存放 Test测试类
(1)DB_Helper类:
package cn.zbw.Mysql;
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 PWD="123456";
// 定义连接的方法
public static Connection conn;
public static Connection getConn(){
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
conn = DriverManager.getConnection(URL,USERNAME,PWD);
} catch (SQLException 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(getConn());
}
}
跟上面连接数据库的代码一样!
(2)Emp类:
package cn.zbw.Mysql.Entity;
public class Emp {
private String empno;
private String ename;
private String job;
private String mgr;
private String hiredate;
private double sal;
private double comm;
private int deptno;
public String getEmpno() {
return empno;
}
public void setEmpno(String 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 String getHiredate() {
return hiredate;
}
public void setHiredate(String hiredate) {
this.hiredate = hiredate;
}
public double getSal() {
return sal;
}
public void setSal(double sal) {
this.sal = sal;
}
public double getComm() {
return comm;
}
public void setComm(double comm) {
this.comm = comm;
}
public int getDeptno() {
return deptno;
}
public void setDeptno(int deptno) {
this.deptno = deptno;
}
public Emp() {
super();
}
public Emp(String empno, String ename, String job, String mgr, String hiredate, double sal, double comm, int deptno) {
this.empno = empno;
this.ename = ename;
this.job = job;
this.mgr = mgr;
this.hiredate = hiredate;
this.sal = sal;
this.comm = comm;
this.deptno = deptno;
}
}
(3)EmpDao接口:
package cn.zbw.Mysql.Dao;
import cn.zbw.Mysql.Entity.Emp;
import java.util.List;
public interface EmpDao {
public List<Emp> findAllEmp();
public Emp findOneEmp(int empno);
}
(4)EmpDaoImpl实现类:
package cn.zbw.Mysql.Dao_Impl;
import cn.zbw.Mysql.DB_Helper;
import cn.zbw.Mysql.Dao.EmpDao;
import cn.zbw.Mysql.Entity.Emp;
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 EmpDaoImpl implements EmpDao {
@Override
public List<Emp> findAllEmp() {
List<Emp> lists = new ArrayList<Emp>();
Connection conn = DB_Helper.getConn();//1、获得数据库连接对象
String sql = "select * from emp";//2、书写sql语句操作数据表
try {
PreparedStatement ps = conn.prepareStatement(sql);//3、预编译sql语句
ResultSet rs = ps.executeQuery();//4、执行查询命令
while (rs.next()) {//5、循环读取表中的数据
Emp emp = new Emp();
emp.setEmpno(rs.getString(1));
emp.setEname(rs.getString(2));
emp.setJob(rs.getString(3));
emp.setMgr(rs.getString(4));
emp.setHiredate(rs.getString(5));
emp.setSal(rs.getDouble(6));
emp.setComm(rs.getDouble(7));
emp.setDeptno(rs.getInt(8));
lists.add(emp);//6、把读取的数据存入集合
}
} catch (SQLException e) {
e.printStackTrace();
}
return lists;
}
public Emp findOneEmp(int no) {
Emp emp = null;
Connection conn = DB_Helper.getConn();//1、获得数据库连接对象
String sql = "select * from emp where empno=?";//2、书写sql语句操作数据表
try {
PreparedStatement ps = conn.prepareStatement(sql);//3、预编译sql语句
ps.setInt(1, no);
ResultSet rs = ps.executeQuery();//4、执行查询命令
while (rs.next()) {//5、循环读取表中的数据
emp = new Emp();
emp.setEmpno(rs.getString(1));
emp.setEname(rs.getString(2));
emp.setJob(rs.getString(3));
emp.setMgr(rs.getString(4));
emp.setHiredate(rs.getString(5));
emp.setSal(rs.getDouble(6));
emp.setComm(rs.getDouble(7));
emp.setDeptno(rs.getInt(8));
}
} catch (SQLException e) {
e.printStackTrace();
}
return emp;
}
}
(5)Test测试类:
package cn.zbw.Mysql.Test;
import cn.zbw.Mysql.Dao.EmpDao;
import cn.zbw.Mysql.Dao_Impl.EmpDaoImpl;
import cn.zbw.Mysql.Entity.Emp;
import java.util.List;
public class Test {
public static void main(String[] args) {
EmpDao empno = new EmpDaoImpl();
List<Emp> list = empno.findAllEmp();
for (Emp e:list){
System.out.println(e.getEmpno()+"\t"+e.getEname()+"\t"+e.getJob());
}
System.out.println("------------------------------------------------");
Emp oneEmp = empno.findOneEmp(6);
if (oneEmp!=null){
System.out.println(oneEmp.getEmpno()+"\t"+oneEmp.getEname()+"\t"+oneEmp.getJob());
}
}
}
结果是: