MySQL Java的JDBC编程

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: MySQL Java的JDBC编程

 🤞目录🤞

💖1. Java的数据库编程:JDBC

💖2. JDBC工作原理

💖3. JDBC使用


🏀1. Java的数据库编程:JDBC

JDBC,即Java Database Connectivityjava数据库连接。是一种用于执行SQL语句的Java API,它是 Java中的数据库连接规范。这个APIjava.sql.*,javax.sql.* 包中的一些类和接口组成,它为Java 开发人员操作数据库提供了一个标准的API,可以为多种关系数据库提供统一访问。

🏀2. JDBC工作原理

JDBC 为多种关系数据库提供了统一访问方式,作为特定厂商数据库访问API的一种高级抽象,它主要包含一些通用的接口类。

image.gif编辑

🏀3. JDBC使用

准备数据库驱动包,并添加到项目的依赖中:

使用java IDEA 新建一个Maven项目

image.gif编辑

打开并配置 pom.xml

image.gif编辑

🎈建立数据库连接:

MysqlDataSource db = new MysqlDataSource();
        // 1. 告诉客户端,MySQL服务器在哪
        // 通过告诉 地址 + 端口
        db.setServerName("localhost");
        db.setPort(3306);
        // 2. 认证(名称 + 密码)
        db.setUser("root");
        db.setPassword("123456");
        //  设置默认库(要操作的库名)
        db.setDatabaseName("0331_library");
        // 3. 其他配置
        db.setUseSSL(false);
        db.setCharacterEncoding("utf-8");
        db.setServerTimezone("Asia/Shanghai");

image.gif

🎈为了方便我们新建一个DBUtil类,直接调用即可

public class DBUtil {
    private static final DataSource dataSource;
    static {
        MysqlDataSource db = new MysqlDataSource();
        db.setServerName("localhost");
        db.setPort(3306);
        db.setUser("root");
        db.setPassword("123456");
        db.setDatabaseName("0331_library");
        db.setUseSSL(false);
        db.setCharacterEncoding("utf-8");
        db.setServerTimezone("Asia/Shanghai");
        dataSource = db;
    }
    public static Connection connection() throws SQLException {
        return dataSource.getConnection();
    }
}

image.gif

🎈使用演示:

//已设默认库,写执行语句
        // a. 查询
        String sql = "select * from books";
        // 4. 通过网络和MySQL服务器建立连接
        try (Connection c = DBUTil.connection()) {
            // 5. 发送给MySQL服务器我们的语句
            try (PreparedStatement ps = c.prepareStatement(sql)) {
                // 6. executeQuery 执行查询
                // 7. ResultSet接收(需要输出)
                try (ResultSet rs = ps.executeQuery()) {
                    // 8. 遍历、检索、打印集中的数据
                    while (rs.next()) {
                        String rid = rs.getString(1);
                        String name = rs.getString(2);
                        String stock = rs.getString(3);
                        String total = rs.getString(4);
                        System.out.printf("%s\t%s\t%s\t%s\n",rid,name,stock,total);
                    }
                }
            }
        }

image.gif

🎈对该库具体的增删改查完整代码如下:

import java.sql.*;
import java.util.Scanner;
public class Demo1 {
    public static void main(String[] args) throws SQLException {
        Scanner scanner = new Scanner(System.in);
        try(Connection c = DBUtil.connection()){
            // 1.增
            String sql1 = "insert into readers (name) values (?)";
            String newReaderName = scanner.next();
            //Statement.RETURN_GENERATED_KEYS 得到自增值操作
            try(PreparedStatement ps = c.prepareStatement(sql1,Statement.RETURN_GENERATED_KEYS)){
                ps.setString(1,newReaderName);
                ps.executeUpdate();
                try(ResultSet rs = ps.getGeneratedKeys()){
                    rs.next();
                    int rid = rs.getInt(1);
                    System.out.println("新插入了一个reader:" + rid +"\t"+newReaderName);
                }
            }
            // 2.删
            String sql2 = "delete from readers where name = '刘昕怡'";
            try(PreparedStatement ps = c.prepareStatement(sql2)){
                ps.executeUpdate();
            }
            // 3.改
            String sql3 = "update readers set name = '刘昕怡' where name = '陈浩民'";
            try (PreparedStatement ps = c.prepareStatement(sql3)){
                ps.executeUpdate();
            }
            // 4.查
            String sql4 = "select * from books where 1 = 1";
            try(PreparedStatement ps = c.prepareStatement(sql4)){
                try(ResultSet rs = ps.executeQuery()){
                    while (rs.next()){
                        int rid = rs.getInt(1);
                        String name = rs.getString(2);
                        int stock = rs.getInt(3);
                        int total = rs.getInt(4);
                        System.out.printf("%d\t%s\t%d\t%d\n",rid,name,stock,total);
                    }
                }
            }
        }
    }
}

image.gif

🎈此代码中涉及两个表:

readers表:

image.gif编辑

books表:

image.gif编辑

🎈MYSQL建表等操作请见上节:《 MySQL 增删改查(基础 + 详解)》

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4天前
|
缓存 Java UED
Java中的多线程编程:从基础到实践
【10月更文挑战第13天】 Java作为一门跨平台的编程语言,其强大的多线程能力一直是其核心优势之一。本文将从最基础的概念讲起,逐步深入探讨Java多线程的实现方式及其应用场景,通过实例讲解帮助读者更好地理解和应用这一技术。
21 3
|
4天前
|
Java 开发者
在Java编程中,正确的命名规范不仅能提升代码的可读性和可维护性,还能有效避免命名冲突。
【10月更文挑战第13天】在Java编程中,正确的命名规范不仅能提升代码的可读性和可维护性,还能有效避免命名冲突。本文将带你深入了解Java命名规则,包括标识符的基本规则、变量和方法的命名方式、常量的命名习惯以及如何避免关键字冲突,通过实例解析,助你写出更规范、优雅的代码。
25 3
|
4天前
|
Java 程序员
在Java编程中,关键字不仅是简单的词汇,更是赋予代码强大功能的“魔法咒语”。
【10月更文挑战第13天】在Java编程中,关键字不仅是简单的词汇,更是赋予代码强大功能的“魔法咒语”。本文介绍了Java关键字的基本概念及其重要性,并通过定义类和对象、控制流程、访问修饰符等示例,展示了关键字的实际应用。掌握这些关键字,是成为优秀Java程序员的基础。
11 3
|
4天前
|
Java 程序员 编译器
在Java编程中,保留字(如class、int、for等)是具有特定语法意义的预定义词汇,被语言本身占用,不能用作变量名、方法名或类名。
在Java编程中,保留字(如class、int、for等)是具有特定语法意义的预定义词汇,被语言本身占用,不能用作变量名、方法名或类名。本文通过示例详细解析了保留字的定义、作用及与自定义标识符的区别,帮助开发者避免因误用保留字而导致的编译错误,确保代码的正确性和可读性。
15 3
|
4天前
|
算法 Java
在Java编程中,关键字和保留字是基础且重要的组成部分,正确理解和使用它们
【10月更文挑战第13天】在Java编程中,关键字和保留字是基础且重要的组成部分。正确理解和使用它们,如class、int、for、while等,不仅能够避免语法错误,还能提升代码的可读性和执行效率。本指南将通过解答常见问题,帮助你掌握Java关键字的正确使用方法,以及如何避免误用保留字,使你的代码更加高效流畅。
20 3
|
3天前
|
Java 关系型数据库 MySQL
mysql5.7 jdbc驱动
遵循上述步骤,即可在Java项目中高效地集成MySQL 5.7 JDBC驱动,实现数据库的访问与管理。
12 1
|
3天前
|
存储 安全 Java
了解final关键字在Java并发编程领域的作用吗?
在Java并发编程中,`final`关键字不仅用于修饰变量、方法和类,还在多线程环境中确保对象状态的可见性和不变性。本文深入探讨了`final`关键字的作用,特别是其在final域重排序规则中的应用,以及如何防止对象的“部分创建”问题,确保线程安全。通过具体示例,文章详细解析了final域的写入和读取操作的重排序规则,以及这些规则在不同处理器上的实现差异。
了解final关键字在Java并发编程领域的作用吗?
|
14天前
|
SQL 分布式计算 关系型数据库
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
54 0
|
14天前
|
SQL 分布式计算 关系型数据库
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
27 0
|
14天前
|
SQL 分布式计算 关系型数据库
Hadoop-22 Sqoop 数据MySQL到HDFS(全量) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-22 Sqoop 数据MySQL到HDFS(全量) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
36 0