一、jdbc简介
1、什么是JDBC
JDBC 指 Java 数据库连接,是一种标准Java应用编程接口( JAVA API),用来连接 Java 编程语言和广泛的数据库。
JDBC API 库包含下面提到的每个任务,都是与数据库相关的常用用法。
- 制作到数据库的连接。
- 创建 SQL 或 MySQL 语句。
- 执行 SQL 或 MySQL 查询数据库。
- 查看和修改所产生的记录。
从根本上来说,JDBC 是一种规范,它提供了一套完整的接口,允许便携式访问到底层数据库,因此可以用 Java 编写不同类型的可执行文件,例如:
- Java 应用程序
- Java Applets
- Java Servlets
- Java ServerPages (JSPs)
- Enterprise JavaBeans (EJBs)
所有这些不同的可执行文件就可以使用 JDBC 驱动程序来访问数据库,这样可以方便的访问数据。
JDBC 具有 ODBC 一样的性能,允许 Java 程序包含与数据库无关的代码。
2、JDBC 架构
JDBC 的 API 支持两层和三层处理模式进行数据库访问,但一般的 JDBC 架构由两层处理模式组成:
-
JDBC API: 提供了应用程序对 JDBC 管理器的连接。
- JDBC Driver API: 提供了 JDBC 管理器对驱动程序连接。
JDBC API 使用驱动程序管理器和数据库特定的驱动程序来提供异构(heterogeneous)数据库的透明连接。
JDBC 驱动程序管理器可确保正确的驱动程序来访问每个数据源。该驱动程序管理器能够支持连接到多个异构数据库的多个并发的驱动程序。
以下是结构图,其中显示了驱动程序管理器相对于在 JDBC 驱动程序和 Java 应用程序所处的位置。
二、JDBC进行数据库的操作
1、创建数据库
1.1 创建数据库
create database students;
1.2 设置数据库视图
use students;
1.3 删除表--(在创建表格之前我们不知道数据库是否有此表所以我们要先做删除表格的操作)
我要创建一个表格为的名字为"student",代码如下:
drop table if exists student;
1.4 创建名为 "Student" 的表格
CREATE TABLE Student
(
StuId int PRIMARY KEY AUTO_INCREMENT,
StuName VARCHAR(8),
StuSex VARCHAR(2) ,
StuAge int ,
StuAddr VARCHAR(24)
)
1.5 新增数据
INSERT INTO Student (StuName,StuSex,StuAge,StuAddr)
VALUES(
'张三','男',20,'河南'
),
(
'小美','女',18,'山东'
),
(
'Rose','女',19,'美国'
),
(
'Jack','男',21,'英国'
);
2、创建实体类
2.1 先在IDEA中创建实体类:类的名字对应数据库表的名字、类的属 性对应表的字段
package com.hp.bean;
public class Student {
private int stuId;
private String stuName;
private String stuSex;
private int stuAge;
private String stuAddr;
public Student() {
}
public Student(int stuId, String stuName, String stuSex, int stuAge, String stuAddr) {
this.stuId = stuId;
this.stuName = stuName;
this.stuSex = stuSex;
this.stuAge = stuAge;
this.stuAddr = stuAddr;
}
public int getStuId() {
return stuId;
}
public void setStuId(int stuId) {
this.stuId = stuId;
}
public String getStuName() {
return stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
public String getStuSex() {
return stuSex;
}
public void setStuSex(String stuSex) {
this.stuSex = stuSex;
}
public int getStuAge() {
return stuAge;
}
public void setStuAge(int stuAge) {
this.stuAge = stuAge;
}
public String getStuAddr() {
return stuAddr;
}
public void setStuAddr(String stuAddr) {
this.stuAddr = stuAddr;
}
@Override
public String toString() {
return "Student{" +
"stuId=" + stuId +
", stuName='" + stuName + '\'' +
", stuSex='" + stuSex + '\'' +
", stuAge=" + stuAge +
", stuAddr='" + stuAddr + '\'' +
'}';
}
}
3、JDBC的查询、添加、删除、修改操作
3.1 补充:( junit的用法补充:junit可以使方法脱离main方法直接执行,方便进行程序测试 )
3.2 JDBC的查询数据操作
public class StudentTest {
private String driver = "com.mysql.cj.jdbc.Driver";
private String url = "jdbc:mysql://localhost:3306/Students?useSSL=false&serverTimezone=UTC";
private String username = "root";
private String passward = "123456";
//JDBC查询所有
@Test
public void testSelectAll() throws Exception {
//1.加载驱动
Class.forName(driver);
//2.获取连接
Connection con = DriverManager.getConnection(url, username, passward);
//3.编写SQL语句
String sql="select * from student";
//4.执行SQL语句对象
PreparedStatement pstm = con.prepareStatement(sql);
//5.获取结果集
ResultSet rs = pstm.executeQuery();
//6.输出结果
List<Student> studentList = new ArrayList<>();
while (rs.next()){
int stuId=rs.getInt("stuId");
String stuName=rs.getString("stuName");
String stuSex=rs.getString("stuSex");
int stuAge=rs.getInt("stuAge");
String stuAddr=rs.getString("stuAddr");
Student student = new Student();
student.setStuName(stuName);
student.setStuAge(stuAge);
student.setStuId(stuId);
student.setStuAddr(stuAddr);
student.setStuSex(stuSex);
studentList.add(student);
}
for (Student student:studentList){
System.out.println(student);
}
//7.关闭资源
if (rs!=null){
rs.close();
}
if (pstm!=null){
pstm.close();
}
if (con!=null){
con.close();
}
}
}
3.3 JDBC的添加数据操作
public class StudentTest {
private String driver = "com.mysql.cj.jdbc.Driver";
private String url = "jdbc:mysql://localhost:3306/Students?useSSL=false&serverTimezone=UTC";
private String username = "root";
private String passward = "123456";
//JDBC添加操作
@Test
public void testAdd() throws Exception {
//1.加载驱动
Class.forName(driver);
//2.获取连接
Connection con = DriverManager.getConnection(url, username, passward);
//3.添加SQL语句
String sql="insert into student (stuName,stuSex,stuAge,stuAddr) values (?,?,?,?)";
//4.预处理SQL语句
PreparedStatement pstm = con.prepareStatement(sql);
Student stu=new Student();
stu.setStuName("王五");
stu.setStuSex("男");
stu.setStuAge(12);
stu.setStuAddr("叙利亚");
//5.给?赋值
pstm.setObject(1,stu.getStuName());
pstm.setObject(2,stu.getStuAge());
pstm.setObject(3,stu.getStuAge());
pstm.setObject(4,stu.getStuAge());
//6.判断数据是否添加成功
int n=pstm.executeUpdate();
if(n>0){
System.out.println("添加成功");
}else {
System.out.println("添加失败");
}
//7.关闭资源
if(pstm!=null){
pstm.close();
}
if (con!=null){
con.close();
}
}
}
3.4 JDBC的删除数据操作
public class StudentTest {
private String driver = "com.mysql.cj.jdbc.Driver";
private String url = "jdbc:mysql://localhost:3306/StudentsuseSSL=false&serverTimezone=UTC";
private String username = "root";
private String passward = "123456";
//JDBC删除操作
@Test
public void testDel() throws Exception {
//1.加载驱动
Class.forName(driver);
//2.获取连接
Connection con = DriverManager.getConnection(url, username, passward);
//3.编写SQL语句
String sql="delete from student where stuId=?";
//4.预处理SQL语句
PreparedStatement pstm = con.prepareStatement(sql);
//5.实例化对象
Student student=new Student();
student.setStuId(6);
//6.给?赋值
pstm.setObject(1,student.getStuId());
//7.判断是否执行成功
int n=pstm.executeUpdate();
if(n>0){
System.out.println("删除成功");
}else {
System.out.println("删除失败");
}
//8.关闭资源
if (pstm!=null){
pstm.close();
}
if (con!=null){
con.close();
}
}
}
3.5 JDBC的修改数据操作
public class StudentTest {
private String driver = "com.mysql.cj.jdbc.Driver";
private String url = "jdbc:mysql://localhost:3306/Students?useSSL=false&serverTimezone=UTC";
private String username = "root";
private String passward = "123456";
//JDBC修改操作
@Test
public void textRevise() throws Exception {
//1.获取驱动
Class.forName(driver);
//2.获取连接
Connection con = DriverManager.getConnection(url, username, passward);
//3.编写sql语句---根据id修改名字
String sql="update student set stuName=? where stuId=?";
//4.预处理SQL语句
PreparedStatement pstm = con.prepareStatement(sql);
//4.1 给? 赋值
pstm.setObject(1,"老六");
pstm.setObject(2,1);
//5.判断是否修改成功
int n=pstm.executeUpdate();
if (n>0){
System.out.println("修改数据成功");
}else {
System.out.println("修改数据失败");
}
//6.关闭资源---判断是否开启过连接
if (pstm!=null){
pstm.close();
}
if (con!=null){
con.close();
}
}
}