第二十节,轻松学Java_JDBC编程

mysql-connector-java.jar导入eclipse

注意选择对应自己MySQL的版本。我的是8.0.26。
相对应的.jar包

现在将数据库驱动导入到项目中。
1、再eclipse中建立一个项目,new—folder—文件名,文件名在这里我命名为jdbc。
在这里插入图片描述
2、把数据库驱动复制到这个jdbc文件下。
在这里插入图片描述
3、右键这个驱动 build path—add build path
在这里插入图片描述
在这里插入图片描述

在MySQL中建立数据库和表

新建一个Student表,将学号设定为主键。
在这里插入图片描述
向Student表中填入数据:在这里插入图片描述

使用JDBC连接数据库

在实际操作中, 要使用 JDBC-ODBC 桥驱动程序连接数据库。 通常, 使用 JDBC 连接数据库可以按照以下几个步骤进行:
( 1) 加载并注册数据库驱动。
( 2) 通过 DriverManager 获取数据库连接。
( 3) 通过 Connection 对象获取 Statement 对象。
( 4) 使用 Statement 接口执行 SQL 语句。
( 5) 操作 ResultSet 结果集。
( 6) 关闭连接, 释放资源。

.url连接,DriverManager的第一个参数,这里的数据库是mydb:
String url =“jdbc:mysql://localhost:3306/{自己设置的数据库名}?useSSL=false&serverTimezone=UTC”;

package com.test;

import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class Test {
	public static void main(String[] args) {
		Statement stmt = null;
		ResultSet rs = null;
		Connection conn=null;
		try {
			// 1. 注册数据库的驱动,固定写法,MySQL8,加载驱动。
			Class.forName("com.mysql.cj.jdbc.Driver");
			// 2.通过DriverManager获取数据库连接
			String url = "jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC";
			String username = "root";
			String password = "1234";
			conn = DriverManager.getConnection(url, username, password);
			// 3.通过Connection对象获取Statement对象
			stmt = conn.createStatement();
			// 4.使用Statement执行SQL语句。
			String sql = "select * from Student";
			rs = stmt.executeQuery(sql);
			// 5. 操作ResultSet结果集
			System.out.println("姓名 | 学号 | 班级 | 专业");
			while (rs.next()) {
				String name = rs.getString("姓名"); // 通过列名获取指定字段的值
				String id = rs.getString("学号");
				String cla = rs.getString("班级");
				String maj = rs.getString("班级");
				System.out.println(name + " | " + id + " |" + cla + "  |" + maj);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			// 6.回收数据库资源
			if (rs != null) {
				try {
					rs.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
				rs = null;
			}
			if (stmt != null) {
				try {
					stmt.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
				stmt = null;
			}
			if (conn != null) {
				try {
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
				conn = null;
			}
		}
	}
}

运行结果:
姓名 | 学号 | 班级 | 专业
张三 | 001 |01 |01
李四 | 002 |02 |02
王五 | 003 |03 |03
陈六 | 004 |04 |04

数据库的基本操作

查询数据

Connection 创建 Statement 对象的方式主要有 3 种, 分别如下:
createStatement(): 创建基本的 Statement 对象。
prepareStatement(): 创建 PreparedStatement 对象。
prepareCall(): 创建 CallableStatement 对象。
在 查 询 数 据 时 , 既 可 以 利 用 Statement 实 例 通 过 执 行 静 态 SELECT 语 句 完 成 , 也 可 以 利 用PreparedStatement 实例通过执行动态 SELECT 语句完成, 还可以利用 CallableStatement 实例通过执行存储过程完成。

无论利用哪个实例查询数据,都要执行executeQuery()方法,才是真正执行力SELECT语句。同时返回一个ResultSet型的结果集,该结果集中不仅包含满足查询条件的记录,还包含相应数据表的相关信息,例如每一列的名称、类型和列的数量。

编译预处理

PreparedStatement 是与编译预处理有关的类, 是 Statement 的一个子类。
用 Statement 定义的语句是一个功能明确而具体的语句, 而用 PreparedStatement 类定义的 SQL 语句中则包含一个或多个问号“? ” 占位符, 它们对应多个 IN 参数。 带占位符的 SQL 语句可以被编译, 而在后续执行过程中, 这些占位符需要用 set 方法设置为具体的 IN 参数值, 再将这些语句发送至数据库获得执行。

插入数据

利用Statement对象

package com.test;

import java.sql.Statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class Test {
	public static void main(String[] args) {
		Statement stmt = null;
		Connection conn=null;
		try {
			// 1. 注册数据库的驱动,固定写法,MySQL8,加载驱动。
			Class.forName("com.mysql.cj.jdbc.Driver");
			// 2.通过DriverManager获取数据库连接
			String url = "jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC";
			String username = "root";
			String password = "1234";
			conn = DriverManager.getConnection(url, username, password);
			// 3.通过Connection对象获取Statement对象
			stmt = conn.createStatement();
			// 4.使用Statement执行SQL语句。
			String sql = "insert into Student(姓名,学号,班级,专业) values('秦七','005','05','语文')";
			stmt.executeUpdate(sql);// 执行INSERT语句
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			// 6.回收数据库资源
			if (stmt != null) {
				try {
					stmt.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
				stmt = null;
			}
			if (conn != null) {
				try {
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
				conn = null;
			}
		}
	}
}

运行结果:
在这里插入图片描述

利用PreparedStatement 实例执行动态 INSERT 语句批量添加记录。

package com.test;

import java.sql.PreparedStatement;
import java.sql.Connection;
import java.sql.DriverManager;
public class Test {
	public static void main(String[] args) {
		Connection conn=null;
		try {
			// 1. 注册数据库的驱动,固定写法,MySQL8,加载驱动。
			Class.forName("com.mysql.cj.jdbc.Driver");
			// 2.通过DriverManager获取数据库连接
			String url = "jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC";
			String username = "root";
			String password = "1234";
			conn = DriverManager.getConnection(url, username, password);
			// 3.使用PreparedStatement执行SQL语句。
			String[][] records = { { "张八","006","06","数学"}, { "李九","007","07","计算机"} };
			String sql = "insert into Student(姓名,学号,班级,专业)values(?,?,?,?)"; // 定义动态INSERT语句
			PreparedStatement prpdStmt = conn.prepareStatement(sql); // 预处理动态INSERT语句
			prpdStmt.clearBatch(); // 清空Batch
			for (int i = 0; i < records.length; i++) {
				prpdStmt.setString(1, records[i][0]); // 为参数赋值
				prpdStmt.setString(2, records[i][1]); 
				prpdStmt.setString(3, records[i][2]);// 为参数赋值
				prpdStmt.setString(4, records[i][3]);
				prpdStmt.addBatch(); // 将INSERT语句添加到Batch中
			}
			prpdStmt.executeBatch(); // 批量执行Batch中的INSERT语句
			prpdStmt.close();
			conn.close();
		} catch (Exception e) {
			e.printStackTrace();
		} 
	}
}

运行结果:
在这里插入图片描述

更新数据

利用Statement对象

package com.test;

import java.sql.Statement;
import java.sql.Connection;
import java.sql.DriverManager;
public class Test {
	public static void main(String[] args) {
		Connection conn=null;
		try {
			// 1. 注册数据库的驱动,固定写法,MySQL8,加载驱动。
			Class.forName("com.mysql.cj.jdbc.Driver");
			// 2.通过DriverManager获取数据库连接
			String url = "jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC";
			String username = "root";
			String password = "1234";
			conn = DriverManager.getConnection(url, username, password);
			// 3.使用Statement执行SQL语句。
			Statement statement = conn.createStatement();
			String sql = "update Student set 班级='01' where 专业='计算机'";
			statement.executeUpdate(sql);
			statement.close();
			conn.close();
		} catch (Exception e) {
			e.printStackTrace();
		} 
	}
}

运行结果:
在这里插入图片描述

利用PreparedStatement

package com.test;

import java.sql.PreparedStatement;
import java.sql.Connection;
import java.sql.DriverManager;
public class Test {
	public static void main(String[] args) {
		Connection conn=null;
		try {
			// 1. 注册数据库的驱动,固定写法,MySQL8,加载驱动。
			Class.forName("com.mysql.cj.jdbc.Driver");
			// 2.通过DriverManager获取数据库连接
			String url = "jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC";
			String username = "root";
			String password = "1234";
			conn = DriverManager.getConnection(url, username, password);
			// 3.使用PreparedStatement执行SQL语句。
			String[][] infos = { { "04", "数学" }, { "07", "语文" } };
			String sql = "update Student set 班级=? where 专业=?";
			PreparedStatement prpdStmt = conn.prepareStatement(sql);
			prpdStmt.clearBatch();
			for (int i = 0; i < infos.length; i++) {
				prpdStmt.setString(1, infos[i][0]);
				prpdStmt.setString(2, infos[i][1]);
				prpdStmt.addBatch();
			}
			prpdStmt.executeBatch();
			prpdStmt.close();
			conn.close();
		} catch (Exception e) {
			e.printStackTrace();
		} 
	}
}

运行结果:
在这里插入图片描述

删除数据

利用Statement对象

package com.test;

import java.sql.Statement;
import java.sql.Connection;
import java.sql.DriverManager;
public class Test {
	public static void main(String[] args) {
		Connection conn=null;
		try {
			// 1. 注册数据库的驱动,固定写法,MySQL8,加载驱动。
			Class.forName("com.mysql.cj.jdbc.Driver");
			// 2.通过DriverManager获取数据库连接
			String url = "jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC";
			String username = "root";
			String password = "1234";
			conn = DriverManager.getConnection(url, username, password);
			// 3.使用Statement执行SQL语句。
			Statement statement = conn.createStatement();
			String sql = "delete from Student where 班级='01'";
			statement.executeUpdate(sql);
			statement.close();
			conn.close();
		} catch (Exception e) {
			e.printStackTrace();
		} 
	}
}

运行结果:
在这里插入图片描述
利用PreparedStatement

package com.test;

import java.sql.PreparedStatement;
import java.sql.Connection;
import java.sql.DriverManager;
public class Test {
	public static void main(String[] args) {
		Connection conn=null;
		try {
			// 1. 注册数据库的驱动,固定写法,MySQL8,加载驱动。
			Class.forName("com.mysql.cj.jdbc.Driver");
			// 2.通过DriverManager获取数据库连接
			String url = "jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC";
			String username = "root";
			String password = "1234";
			conn = DriverManager.getConnection(url, username, password);
			// 3.使用PreparedStatement执行SQL语句。
			String[] names = { "数学", "语文" };
			String sql = "delete from Student where 专业=?";
			PreparedStatement prpdStmt = conn.prepareStatement(sql);
			prpdStmt.clearBatch();
			for (int i = 0; i < names.length; i++) {
				prpdStmt.setString(1, names[i]);
				prpdStmt.addBatch();
			}
			prpdStmt.executeBatch();
			prpdStmt.close();
			conn.close();
		} catch (Exception e) {
			e.printStackTrace();
		} 
	}
}

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

身影王座

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值