MySQL JDBC编程

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 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驱动,实现数据库的访问与管理。
311 1
|
2月前
|
Java 关系型数据库 MySQL
【编程基础知识】Eclipse连接MySQL 8.0时的JDK版本和驱动问题全解析
本文详细解析了在使用Eclipse连接MySQL 8.0时常见的JDK版本不兼容、驱动类错误和时区设置问题,并提供了清晰的解决方案。通过正确配置JDK版本、选择合适的驱动类和设置时区,确保Java应用能够顺利连接MySQL 8.0。
223 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
96 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
43 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
56 0
|
3天前
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
45 15
|
3天前
|
关系型数据库 MySQL 数据库
数据库数据恢复—MYSQL数据库文件损坏的数据恢复案例
mysql数据库文件ibdata1、MYI、MYD损坏。 故障表现:1、数据库无法进行查询等操作;2、使用mysqlcheck和myisamchk无法修复数据库。
|
7天前
|
SQL 关系型数据库 MySQL
MySQL导入.sql文件后数据库乱码问题
本文分析了导入.sql文件后数据库备注出现乱码的原因,包括字符集不匹配、备注内容编码问题及MySQL版本或配置问题,并提供了详细的解决步骤,如检查和统一字符集设置、修改客户端连接方式、检查MySQL配置等,确保导入过程顺利。
|
15天前
|
关系型数据库 MySQL 数据库
GBase 数据库如何像MYSQL一样存放多行数据
GBase 数据库如何像MYSQL一样存放多行数据
|
27天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
34 1