Com.Java.Basis 第十五课 JDBC 简称CRUP

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
简介: Com.Java.Basis 第十五课 JDBC 简称CRUP

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的框架开发。

 

相关实践学习
自建数据库迁移到云数据库
本场景将引导您将网站的自建数据库平滑迁移至云数据库RDS。通过使用RDS,您可以获得稳定、可靠和安全的企业级数据库服务,可以更加专注于发展核心业务,无需过多担心数据库的管理和维护。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
Java 关系型数据库 数据库连接
JDBC:Java与数据库的“黄金搭档”,为何它如此重要?
JDBC:Java与数据库的“黄金搭档”,为何它如此重要?
178 8
|
Java 数据库连接 API
JDBC:Java数据库连接的“黑科技”大揭秘
JDBC:Java数据库连接的“黑科技”大揭秘
147 7
|
SQL Java 数据库连接
为何JDBC是Java开发者的“心头好”?原因竟然这么简单!
为何JDBC是Java开发者的“心头好”?原因竟然这么简单!
152 3
|
SQL Java 中间件
【YashanDB知识库】yasdb jdbc驱动集成BeetISQL中间件,业务(java)报autoAssignKey failure异常
在BeetISQL 2.13.8版本中,客户使用batch insert向yashandb表插入数据并尝试获取自动生成的sequence id时,出现类型转换异常。原因是beetlsql在prepareStatement时未指定返回列,导致yashan JDBC驱动返回rowid(字符串),与Java Bean中的数字类型tid不匹配。此问题影响业务流程,使无法正确获取sequence id。解决方法包括:1) 在batchInsert时不返回自动生成的sequence id;2) 升级至BeetISQL 3,其已修正该问题。
【YashanDB知识库】yasdb jdbc驱动集成BeetISQL中间件,业务(java)报autoAssignKey failure异常
|
SQL druid Oracle
【YashanDB知识库】yasdb jdbc驱动集成druid连接池,业务(java)日志中有token IDENTIFIER start异常
客户Java日志中出现异常,影响Druid的merge SQL功能(将SQL字面量替换为绑定变量以统计性能),但不影响正常业务流程。原因是Druid在merge SQL时传入null作为dbType,导致无法解析递归查询中的`start`关键字。
|
Java 数据库连接 数据库
springboot java.lang.ClassNotFoundException: dm.jdbc.driver.DmDriver应该如何解决
通过上述步骤,可以有效解决Spring Boot项目中遇到的 `java.lang.ClassNotFoundException: dm.jdbc.driver.DmDriver`问题。确保在项目中正确添加达梦数据库的JDBC驱动依赖,并在配置文件中正确配置数据源信息,是解决此问题的关键。通过这些方法,可以确保Spring Boot项目能够正确连接达梦数据库并正常运行。
2559 31
|
SQL Java 关系型数据库
使用 JDBC 实现 Java 数据库操作
JDBC(Java Database Connectivity)是 Java 提供的数据库访问技术,允许通过 SQL 语句与数据库交互。本文详细介绍了 JDBC 的使用方法,包括环境准备、编程步骤和完整示例。
1167 7
|
SQL Java 数据库连接
【潜意识Java】Java中JDBC过时方法的替代方案以及JDBC为什么过时详细分析
本文介绍了JDBC中一些常见过时方法及其替代方案。
418 5
|
SQL Java 关系型数据库
【前端学java】JDBC快速入门
【8月更文挑战第12天】JDBC快速入门
187 2
【前端学java】JDBC快速入门
|
Java 数据库连接 网络安全
JDBC数据库编程(java实训报告)
这篇文章是关于JDBC数据库编程的实训报告,涵盖了实验要求、实验环境、实验内容和总结。文中详细介绍了如何使用Java JDBC技术连接数据库,并进行增删改查等基本操作。实验内容包括建立数据库连接、查询、添加、删除和修改数据,每个部分都提供了相应的Java代码示例和操作测试结果截图。作者在总结中分享了在实验过程中遇到的问题和解决方案,以及对Java与数据库连接操作的掌握情况。
JDBC数据库编程(java实训报告)