MySQL JDBC编程

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

本章目标

掌握JDBC的概念和工作原理

学会如何使用java中的JDBC编程

数据库编程必备条件

编程语言,如Java,C、C++、Python等

数据库,如Oracle,MySQL,SQL Server等

数据库驱动包:不同的数据库,对应不同的编程语言提供了不同的数据库驱动包,如:MySQL提供了Java的驱动包mysql-connector-java,需要基于Java操作MySQL即需要该驱动包。同样的,要基于Java操作Oracle数据库则需要Oracle的数据库驱动包ojdbc。

可以看到我们已经具备意思的全部条件了!!!

我们学习了编程语言java,数据库 MySQL,此时我们只需要一个数据库驱动包即可完成数据库编程了

啥是数据库驱动包呢?

其实就是每个数据库提供给编程语言的一个API(函数,接口),让该语言可以通过该驱动包实现对该数据库的基本操作!!!

但是每个不同得到数据库都有自己的驱动包!!!

就好比你买不同的打印机,需要不同的驱动程序!!!


java数据库编程:JDBC

但是我们知道java一向比较牛批!! 他的诞生就是为了解决跨平台!!!

他一听就不乐意了,咋地,你们这么多数据库,都是不同的驱动包! 这不是违背了嘛

所以java想到了一个大一统的方案! 咱出一个JDBC应对不同数据库的驱动包都可以对接!!!


JDBC使用

JDBC下载! 我们可以官网下载!!

但是我们java社区有自己单独的下载工具,就相当于手机的应用商店!!

只需要搜索即可下载!!!

maven中央仓库

image.png


使用案例

如何使用JDBC在java中编程呢?

我们在IDEA中进行操作!


首先我们需要创建一个项目!

在项目中添加一个文件夹,然后将刚刚下载好的JDBCjar包导入项目中!!!

image.png

创建lib文件夹,将jar包复制过去

image.png

Add as Library

image.png

当我们可以看到这么多文件夹 ,那么我们便导入成功了!!!

image.png


编写代码

JDBC的基本流程!


创建DataSource对象,这个对象就是描述了数据库服务器在哪!

image.png

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import javax.sql.DataSource;
public class jdbc {
  public static void main(String[] args) {
    //创建DAtaSource对象
      //导入 javax.sql包
      DataSource dataSource = new MysqlDataSource();
      //描述数据库服务器在哪里
      // 设置数据库所在地址
      //jdbc:mysql://127.0.0.1:3306/java_2022?characterEncoding=utf8&useSSL=false
      ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java_2022?characterEncoding=utf8&useSSL=false");
      //设置登入数据库用户名
      ((MysqlDataSource)dataSource).setUser("root");
      //设置数据库登入密码
      ((MysqlDataSource)dataSource).setPassword("123456");
  }
}

为啥我们的dataSource对象需要使用强制类型转换呢?

因为如果我们直接创建一个MysqlDataSource对象的话,如果我们换一个数据库那么代码的兼容性就较低,需要该的地方较多!而采用类型强制转换,只需要改动部分代码即可!


setUrl


url 指的是 uniform/universal resource locator 唯一资源定位地址,就是我们平常说的网站!


jdbc:mysql://127.0.0.1:3306/java_2022?characterEncoding=utf8&useSSL=false

那这串字符代表什么意思?


jdbc:mysql表示mysql jdbc的网址


//127.0.0.1 mysql 服务器的主机所在的IP地址 ip地址就描述了网络上一个主机的位置,我们也可以用localhost代替,因为当前我们的数据库服务器和客户端的主机都是同一台


3306端口号 访问你的主机上的哪一个程序,3306表示mysql服务器的默认端口号!


java_2022 你需要访问的数据库名称


characterEncoding=utf8 指定字符集编码! 或者是utf8b


&useSSL=false 是否需要传输过程中加密,一般不加密


setUser


设置用户名

setUser("root");

root是管理员用户,我们也可以有其他用户


setPassword


setPasssword("123456");

这就是输入Mysql服务器的密码!


写完上述代码,我们就已经创建好了一个对象!

就相当于我们已经分配了一个任务!!!

但是此时我们没有去执行这个任务

我们需要连接数据库才能访问该数据库!!


如何连接数据库服务器呢?

dataSource对象下有一个方法,可以连接mysql数据库服务器!


Connection connection = dataSource.getConnection();


注意这里的Connection类是java.sql.Connection包下的类!!!


我们已经连上了数据库那么我们就可以对数据库里的内容进行操作了!!!


String sql = "insert into student values('吕布',101)";


我们将sql语句写成字符串!!!


PreparedStatement statement = connection.prepareStatement(sql);


利用connection对象创建一个语句对象!


PreparedStatement statement = connection.prepareStatement(sql);


我们将sql传入statement 语句对象!!!但是并没有执行操作


int ret = statement.executeUpdate();


执行操作语句!!!

此条语句执行后,那么我们的数据库便执行了sql语句!!!


而我们的返回值ret表示几行数据受到影响,就如同我们在命令行执行成功后的提示!!!

image.png

我们可以打印ret值从而知道多少列受到影响!或者打印statement值可以看到具体的sql操作!!!

image.png

我们将sql执行完毕,还需要将数据库连接断开和PrepareStatement资源释放!!!


关闭资源

statement.close();

connection.close();


因为我们是先连接数据库,在创建了statement对象!

所以我们要先closestatement,再close connection!!!


就比如我们打开洗衣机,再放衣服!!!

洗完后要先拿完衣服再关洗衣机!!!


我们附上完整代码!!!


import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class jdbc {
    public static void main(String[] args) throws SQLException{
      //创建DataSource对象
        //相当于分配了一个任务
        //导入 javax.sql包
        DataSource dataSource = new MysqlDataSource();
        //描述数据库服务器在哪里
        // 设置数据库所在地址
        //jdbc:mysql://127.0.0.1:3306/java_2022?characterEncoding=utf8&useSSL=false
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java_2022?characterEncoding=utf8&useSSL=false");
        //((MysqlDataSource)dataSource).setUrl();
        //设置登入数据库用户名
        ((MysqlDataSource)dataSource).setUser("root");
        //设置数据库登入密码
        ((MysqlDataSource)dataSource).setPassword("123456");
        //连接数据库! 相当于去执行这个任务
        //可能数据库连接失败,所以要处理异常!!!
        //这里的Connection类是选择java.sql包下的!!!!
        Connection connection = dataSource.getConnection();
        //这里就可以写我们的数据库sql代码了
        //我们在student 表中插入吕布的成绩
        //我们先写好sql字符串
        String sql = "insert into student values('吕布',101)";
        //然后将sql执行
        //这里的PreparedStatement 也是java.sql包下!!!
        PreparedStatement statement = connection.prepareStatement(sql);
        int ret = statement.executeUpdate(); //数据库增删改操作!!!
        //statement.executeQuery(); 数据库查询操作!!!
        System.out.println(ret);
        System.out.println("statement:"+statement);
        //关闭资源
        statement.close();
        connection.close();
    }
}

PreparedStatement类


我们知道我们可以直接写好sql然后传入到PreparedStatement对象执行!

但是当我们需要执行多条sql

比如我们需要插入多个学生的成绩信息时!

显然一条一条写好传入不够科学!!!

因为每条语句都是只有名字和班级不同!!!


如何改进呢



Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine(); //输入姓名
        int class_ = scanner.nextInt();   //输入班级
        String sql = "insert into student values(?,?)"; //姓名和班级用通配符 ? 代替
        //然后将sql执行
        //这里的PreparedStatement 也是java.sql包下!!!
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setString(1,name); //传入第一列的姓名
        statement.setInt(2,class_); //传入第二列的班级
        int ret = statement.executeUpdate(); //数据库增删改操作!!!

image.png

利用通配符?我们就可以输入不同人的名字和班级了!!!

image.png


那如何去查看一张表的内容呢?


ResultSet ret = statement.executeQuery(); //数据库查询操作!!!


利用executeQuery();我们可以返回一个表结构!!!

我们对这个表结构进行遍历即可!!!


String sql = "select * from student";
        //然后将sql执行
        //这里的PreparedStatement 也是java.sql包下!!!
        PreparedStatement statement = connection.prepareStatement(sql);
        ResultSet ret = statement.executeQuery(); //数据库查询操作!!!
        //我们需要将查询后的数据保存在ResultSet表中!!!
        System.out.println("statement:"+statement);
        while (ret.next()){ //移动指针光标!!
            String name = ret.getString(1); //获取第一列的数据
            int class_ = ret.getInt(2);//获取第二列的数据
            System.out.println("name:"+name+" class:"+class_);
        }

image.png

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
Java 关系型数据库 MySQL
mysql5.7 jdbc驱动
遵循上述步骤,即可在Java项目中高效地集成MySQL 5.7 JDBC驱动,实现数据库的访问与管理。
201 1
|
2月前
|
Java 关系型数据库 MySQL
【编程基础知识】Eclipse连接MySQL 8.0时的JDK版本和驱动问题全解析
本文详细解析了在使用Eclipse连接MySQL 8.0时常见的JDK版本不兼容、驱动类错误和时区设置问题,并提供了清晰的解决方案。通过正确配置JDK版本、选择合适的驱动类和设置时区,确保Java应用能够顺利连接MySQL 8.0。
185 1
|
2月前
|
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
89 0
|
2月前
|
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
40 0
|
2月前
|
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
49 0
|
7月前
|
Java 关系型数据库 数据库连接
实时计算 Flink版操作报错之在使用JDBC连接MySQL数据库时遇到报错,识别不到jdbc了,怎么解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
4月前
|
SQL druid Java
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)
59 3
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)
|
4月前
|
SQL Java 关系型数据库
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(上)
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)
147 3
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(上)
|
7月前
|
Java 关系型数据库 MySQL
JDBC实现往MySQL插入百万级数据
JDBC实现往MySQL插入百万级数据
|
4月前
|
前端开发 关系型数据库 MySQL
com.mysql.jdbc.Driver 和 com.mysql.cj.jdbc.Driver 的区别
这篇文章讨论了`com.mysql.jdbc.Driver`和`com.mysql.cj.jdbc.Driver`两个MySQL驱动类的区别,指出`com.mysql.jdbc.Driver`适用于MySQL 5的`mysql-connector-java`版本,而`com.mysql.cj.jdbc.Driver`适用于MySQL 6及以上版本的`mysql-connector-java`。文章还提到了在实际使用中如何根据MySQL版本选择合适的驱动类。
com.mysql.jdbc.Driver 和 com.mysql.cj.jdbc.Driver 的区别