MySQL JDBC编程

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
云数据库 RDS PostgreSQL,高可用系列 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

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
11月前
|
SQL Java 数据库连接
JDBC编程安装———通过代码操控数据库
本文,教你从0开始学习JBCD,包括驱动包的下载安装调试设置,以及java是如何通过JBDC实现对数据库的操作,以及代码的分析,超级详细
|
Java 关系型数据库 MySQL
mysql5.7 jdbc驱动
遵循上述步骤,即可在Java项目中高效地集成MySQL 5.7 JDBC驱动,实现数据库的访问与管理。
2510 1
|
Java 关系型数据库 MySQL
【编程基础知识】Eclipse连接MySQL 8.0时的JDK版本和驱动问题全解析
本文详细解析了在使用Eclipse连接MySQL 8.0时常见的JDK版本不兼容、驱动类错误和时区设置问题,并提供了清晰的解决方案。通过正确配置JDK版本、选择合适的驱动类和设置时区,确保Java应用能够顺利连接MySQL 8.0。
1048 1
|
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
323 0
|
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
194 0
|
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
238 0
|
2月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
133 3
|
2月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
|
2月前
|
关系型数据库 MySQL 分布式数据库
阿里云PolarDB云原生数据库收费价格:MySQL和PostgreSQL详细介绍
阿里云PolarDB兼容MySQL、PostgreSQL及Oracle语法,支持集中式与分布式架构。标准版2核4G年费1116元起,企业版最高性能达4核16G,支持HTAP与多级高可用,广泛应用于金融、政务、互联网等领域,TCO成本降低50%。
|
2月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。

推荐镜像

更多