Com.Java.Basis 第十五课 《Java的JDBC》简称CRUP:本篇博客文章讲的回很细。
1、什么是JDBC
JDBC(Java Database Connectivity)是一个独立于特定数据库管理系统(DBMS)、通用的SQL数据库存取和操作的公共接口(一组API),定义了用来访问数据库的标准Java类库,使用这个类库可以以一种标准的方法、方便地访问数据库资源
JDBC为访问不同的数据库提供了一种统一的途径,为开发者屏蔽了一些细节问题。
JDBC的目标是使Java程序员使用JDBC可以连接任何提供了JDBC驱动程序的数据库系统,这样就使得程序员无需对特定的数据库系统的特点有过多的了解,从而大大简化和加快了开发过程。
2 什么是 CRUP:这样理解:在建立的表中 你需要删除一条记录 查询表的所有数据 修改表的字段 删除一条记录。
实操:
1 创建数据库 创建数据表 对数据进行 增删改查
/* Navicat Premium Data Transfer Source Server : demossmtest Source Server Type : MySQL Source Server Version : 80023 Source Host : localhost:3306 Source Schema : students Target Server Type : MySQL Target Server Version : 80023 File Encoding : 65001 Date: 05/07/2022 18:13:43 */ SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for student -- ---------------------------- DROP TABLE IF EXISTS `student`; CREATE TABLE `student` ( `stuId` int NOT NULL, `stuName` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, `stuSex` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, `stuAge` int NULL DEFAULT NULL, PRIMARY KEY (`stuId`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of student -- ---------------------------- INSERT INTO `student` VALUES (1003, '我想', '男', 35); INSERT INTO `student` VALUES (1004, '年少清华', '男', 35); INSERT INTO `student` VALUES (1005, '爱的主宰', '男', 520); INSERT INTO `student` VALUES (1006, '我相信自己', '男', 520); INSERT INTO `student` VALUES (1008, '李四', '男', 35); SET FOREIGN_KEY_CHECKS = 1;
2 这里要运用到是Java中常用到的架包:用来连接数据库的:
3 建立包名创建工具类 先讲一下知识点 关于工具类的。
package Com.Jdbc.Util;//开发者建立的包名
import java.sql.Connection; import java.sql.DriverManager;//导入连接数据库的架包
//加载驱动程序 Class.forName("com.mysql.cj.jdbc.Driver");
//数据库的所在地址 String url = "jdbc:mysql://127.0.0.1:3306/students";
//3 数据库的用户名 String username = "root";
//4 数据库的密码 String password = "123456";
conn = DriverManager.getConnection(url, username, password);
看下面的代码:将常用到的Java功能进行封装:
package Com.Jdbc.Util; import java.sql.Connection; import java.sql.DriverManager; public class DBUtil { public static Connection getConnection() { Connection conn = null; try { //加载驱动程序 Class.forName("com.mysql.cj.jdbc.Driver"); System.out.println("加载驱动类成功"); //建立数据库 //数据库的所在地址 String url = "jdbc:mysql://127.0.0.1:3306/students"; System.out.println("mysql连接成功"); //3 数据库的用户名 String username = "root"; //4 数据库的密码 String password = "123456"; conn = DriverManager.getConnection(url, username, password); } catch (Exception e) { e.printStackTrace(); System.out.println("数据库连接成功,开始了"); } return conn; } //last //封装方法 public static void getClose(Connection conn) { try { if (conn != null) { conn.close(); } } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } System.err.println("数据库中的数据运行结束"); } }
4 完成第一个功能 查询表中的数据 利用java的方式:
// 第一步 建立链接 Connection conn = DBUtil.getConnection();
// 第二步 创建statement对象 Statement stmt =conn.createStatement();
// 第三步 执行mysql语句 String sql="select *from student"; ResultSet rs =stmt.executeQuery(sql);
//第四步 遍历集合 循环遍历 while(rs.next()) { int stuId=rs.getInt("stuId"); String stuName=rs.getString("stuName"); String stuSex=rs.getString("stuSex"); int stuAge=rs.getInt("stuAge"); System.out.println(stuId+"---------"+stuName+"-----------"+stuSex+"---------"+stuAge); }
package Com.Jdbc.Java; import Com.Jdbc.Util.DBUtil; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; /** * 查询语句 */ public class Test3 { public static void main(String[] args) throws Exception { // 第一步 建立链接 Connection conn = DBUtil.getConnection(); // 第二步 创建statement对象 Statement stmt =conn.createStatement(); // 第三步 执行mysql语句 String sql="select *from student"; ResultSet rs =stmt.executeQuery(sql); //第四步 遍历集合 循环遍历 while(rs.next()) { int stuId=rs.getInt("stuId"); String stuName=rs.getString("stuName"); String stuSex=rs.getString("stuSex"); int stuAge=rs.getInt("stuAge"); System.out.println(stuId+"---------"+stuName+"-----------"+stuSex+"---------"+stuAge); } //关闭数据库连接 DBUtil.getClose(conn); } }
5 完成第二个功能 在数据库的表中增加一条记录:
// 第一步 建立链接 Connection conn = DBUtil.getConnection();
// 第二步 创建statement对象 Statement stmt =conn.createStatement();
// 第三步 执行mysql语句 //增加语句 String sql=" INSERT INTO `students`.`student`(`stuId`, `stuName`, `stuSex`, `stuAge`)" + " VALUES (1006, 'I LOVE YOU ', '女', 520)";
//4 执行语句 int count= stmt.executeUpdate(sql); if(count>0) { System.out.println("学生插入成功"); }else { System.out.println("in the end"); }
package Com.Jdbc.Java; import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; import Com.Jdbc.Util.DBUtil; public class Test1 { /** * 方案一:利用java删除数据库中的数据 * @param args * @throws SQLException */ public static void main(String[] args) throws SQLException { Connection conn=DBUtil.getConnection(); System.out.println(conn); //获取 statement对象 Statement stmt =conn.createStatement(); //增加语句 String sql=" INSERT INTO `students`.`student`(`stuId`, `stuName`, `stuSex`, `stuAge`)" + " VALUES (1006, 'I LOVE YOU ', '女', 520)"; //4 执行语句 int count= stmt.executeUpdate(sql); if(count>0) { System.out.println("学生插入成功"); }else { System.out.println("in the end"); } DBUtil.getClose(conn); } }
6 完成第三个功能 修改字段 修改功能 将性别改为女人
// 第一步 建立链接 Connection conn = DBUtil.getConnection();
// 第二步 创建statement对象 Statement stmt =conn.createStatement();
String sql="update student set stuSex='男' "; stmt.executeLargeUpdate(sql);
System.out.println("数据库中的数据修改成功"); DBUtil.getClose(conn);
package Com.Jdbc.Java; import Com.Jdbc.Util.DBUtil; import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; /** * 修改语句 */ public class Test2 { /** * 修改数据利用就Java代码修改数据 * @param args * @throws SQLException */ public static void main(String[] args) throws SQLException { // 建立链接 Connection conn = DBUtil.getConnection(); // Statement stmt =conn.createStatement(); String sql="update student set stuSex='男' "; stmt.executeLargeUpdate(sql); System.out.println("数据库中的数据修改成功"); DBUtil.getClose(conn); } }
7 完成第四个功能删除功能:
// 第一步 建立链接 Connection conn = DBUtil.getConnection();
// 第二步 创建statement对象 Statement stmt =conn.createStatement();
String sql = "delete from `student` where stuId=1002"; //删除语句
//4 执行语句 int count = stmt.executeUpdate(sql); if (count > 0) { System.out.println("学生删除成功"); }
package Com.Jdbc.Java; import Com.Jdbc.Util.DBUtil; import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; /** * 删除语句 */ public class Test4 { public static void main(String[] args) throws SQLException { Connection conn = DBUtil.getConnection(); System.out.println(conn); //获取 statement对象 Statement stmt = conn.createStatement(); //增加 String sql = "delete from `student` where stuId=1002"; ; //4 执行语句 int count = stmt.executeUpdate(sql); if (count > 0) { System.out.println("学生删除成功"); } } }
8下面是升级版的:
package Com.Jdbc2; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class Test{ public Connection con=null; /** * 定义方法,用于连接数据库 */ public void getConnection() { //1.加载插件 try { Class.forName("com.mysql.jdbc.Driver"); //2.准备连接数据的信息:要连接的数据库的地址 用户名 密码 String url="jdbc:mysql://localhost:3306/students?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&serverTimeZone=UTC"; String username="root"; String password="123456"; //使用设备管理器类根据提供的信息连接数据库 con=DriverManager.getConnection(url, username, password); } catch (Exception e) { e.printStackTrace(); } } /** * 增加一条的数据记录 */ @org.junit.Test public void test1() { //添加数据 getConnection(); //判断是否连接成功 if (con!=null) { //准备要执行的添加sql语句 //在jdbc连接数据库中,使用占位符? String sql="insert into tb_students(name,age) VALUES(?,?)"; //准备执行sql语句 try { PreparedStatement ps=con.prepareStatement(sql); ps.setString(1, "少年的你"); ps.setInt(2, 22); int count=ps.executeUpdate(); if (count>0) { System.out.println("添加成功"); } //执行完成之后,要断开数据库连接 ps.close(); con.close(); } catch (SQLException e) { e.printStackTrace(); } } } /** * 修改一条数据内容 */ @org.junit.Test public void test2() { //修改语句 getConnection(); if (con!=null) { String sql="update tb_students set age=? where id=?"; try { PreparedStatement ps=con.prepareStatement(sql); ps.setInt(1, 10023); ps.setInt(2, 122); int i=ps.executeUpdate(); if (i>0) { System.out.println("修改成功"); } ps.close(); con.close(); } catch (SQLException e) { e.printStackTrace(); } } } /** * 删除一条数据内容 */ @org.junit.Test public void test3() { //删除语句 getConnection(); if (con!=null) { String sql="delete from tb_students where id=?"; try { PreparedStatement ps=con.prepareStatement(sql); ps.setInt(1, 1); int i=ps.executeUpdate(); if (i>0) { System.out.println("删除成功"); } ps.close(); con.close(); } catch (SQLException e) { e.printStackTrace(); } } } /** * 查询的内容 */ @org.junit.Test public void test4() { //查询语句 //根据id=1查询学生的信息 getConnection(); if (con!=null) { String sql="select * from tb_students where id=?"; try { PreparedStatement ps=con.prepareStatement(sql); ps.setInt(1, 1); ResultSet rs=ps.executeQuery(); //因为查询出来的数据是一张表的结构,游标默认停留在第一行,是字段名 //所有需要获得的数据要从第二行开始 if (rs.next()) { int id=rs.getInt(1); String name=rs.getString(2); int age=rs.getInt(3); System.out.println(id+"--"+name+"--"+age); } //断开连接 rs.close(); ps.close(); con.close(); } catch (SQLException e) { e.printStackTrace(); } } } /** * 修改的数据内容 */ @org.junit.Test public void test5() { List<Map<String, Object>> oList=new ArrayList<Map<String,Object>>(); //查询多行数据 getConnection(); if (con!=null) { String sql="select * from tb_student"; try { PreparedStatement ps=con.prepareStatement(sql); ResultSet rs=ps.executeQuery(); while (rs.next()) { int id=rs.getInt(1);//4 String name=rs.getString(2);//王六 int age=rs.getInt(3);//25 Map<String, Object> oMap=new HashMap<String, Object>(); oMap.put("id", id); oMap.put("name", name); oMap.put("age", age); oList.add(oMap); } //断开连接 colse() rs.close(); ps.close(); con.close(); } catch (SQLException e) { e.printStackTrace(); } } //循环遍历集合,显示所有数据 for (Map<String, Object> map : oList) { System.out.println(map); } //jdk1.8的新特性 List<String> o=new ArrayList<String>(); o.add("abc"); o.add("123"); o.add("456"); o.add("789"); //labdam表达式 o.forEach(s->System.out.println(s)); } }
其实关于数据库的增删改查还有一些方案要用到的架包有如下:下面的内容属于java的框架开发。