MySQL案例1 MySQL的简单应用及用Java操作

一、具体案例描述

MySQL数据库操作:

学生表student信息如下,

Name English Math Computer
zhangsan 69 86 77
lisi 55 100 88
  • 根据上面给出的student表,在MySQL数据库中完成以下操作:

    (1)在MySQL中创建student表,并录入数据。

    (2)用SQL语句输出student表中的所有记录。

    (3)查询zhangsan的Computer成绩。

    (4)修改lisi的Math成绩,改为95。

  • 根据上面已经设计出的student表,使用MySQL的Java客户端编程实现以下操作:

    (1)向student表中添加如下所示的一条记录。

    Name English Math Computer
    scofield 45 89 100

    (2)获取scofield的English成绩信息。

二、上机操作

0、实验环境

  • 硬件平台:一台笔电,操作系统为Win10pro 64位

  • 软件环境:

    数据库Server版本,8.0.30 MySQL Community Server

    图形化管理工具,Navicat Premium 15.0.25

    Java开发工具,IntelliJ IDEA 2020.1

    Jdk版本,jdk1.8.0_221

1、要用的SQL语句

​ (创建过程可用navicat可视化软件来完成操作,这里为了便于学习全部使用SQL语句)

  • 创建数据库
1
2
-- 先创建一个学生集合的数据库
create database studentdb;
  • 创建表
1
2
3
4
5
6
7
8
9
10
11
-- 创建学生表
-- 整型数据"tinyint unsigned"的取值范围为0~255,用它来表示学生成绩
create table `studentdb`.`student`(
Name varchar(20) not null, --成绩单信息定义为非空约束
English tinyint unsigned not null,
Math tinyint unsigned not null,
Computer tinyint unsigned not null
);
-- 再查看一下表结构
use studentdb;
desc student;

用navicat刷新一下数据库,发现新增了数据库studentdb和student表
img_202210140922357

  • 插入数据

    1
    2
    -- 批量插入学生成绩
    insert into `student` (Name,English,Math,Computer) values ('zhangsan','69','86','77'), ('lisi','55','100','88');
  • 查询表内容

    1
    2
    -- 输出student表中的所有记录
    select * from student;

查询结果如下
img_202210140924365

1
2
3
-- 按条件查询数据
-- 查询zhangsan的Computer成绩
select Name,Computer from student where Name = 'zhangsan';

查询结果如下
img_202210140925302

  • 修改数据
    1
    2
    -- 修改lisi的Math成绩,改为95
    update `student` set Math = 95 where Name = 'lisi';

查询到修改结果如下,修改成功img_202210140925304

在数据库中刷新,student表中信息也同步修改了

img_202210140925310

2、Java操作MySQL数据库

(1)使用 JDBC 技术连接 MySQL 数据库

这里用IntelliJ IDEA开发工具新建一个maven的工程连接MySQL,新建成功后首先配置pom.xml文件

img_202210140926388

img_202210140926393

1.找MySQL数据库对应的驱动依赖文件

进入maven仓库的官网:https://mvnrepository.com/,搜索mysql接着点击第一个搜索结果

img_202210140927806

选择自己对应的mysql版本,复制下方的maven依赖代码

不知道自己MySQL版本的可以用DOS命令查看,我的是mysql 8.0.30版本

img_202210140928892

选择自己安装的mysql版本img_202210140929442

img_202210140929445

这里我自己用的是最新的mysql 8.0.30版本

1
2
3
4
5
6
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.30</version>
</dependency>

将复制的依赖文件粘贴到pom.xml配置文件中,注意前后要加上,修改完后该界面的左上角会出现一个刷新按钮,点击刷新,联网状态下IDEA工具会自动帮你下载对应的驱动包

img_202210140929816

img_202210140929823

上面的仓库依赖配置好后,就可以进入正式的编程开发了

(2)具体代码实现

新建一个Java文件,连接MySQL数据库并进行操作的基本过程如下,

step1.加载驱动

注意MySQL 8.0 以上版本的数据库连接要使用:com.mysql.cj.jdbc.Driver

1
2
//加载JDBC驱动
Class.forName("com.mysql.cj.jdbc.Driver");

step2.定义用户信息和URL参数

1
2
3
4
5
//定义用户信息和URL参数,连接MySQL用
//studentdb是要连接的数据库,需要提前创建好,且student表已包含两条成绩记录
String url = "jdbc:mysql://localhost:3306/studentdb";
String user = "root";
String password = "root";

step3.连接数据库

1
2
//连接数据库,使用驱动管理类;connection就表示数据库
Connection connection = DriverManager.getConnection(url, user, password);

上面的3步是对数据库连接的基本条件,不同的是以下几步

step4.创建一个SQL语句对象

1
2
//创建一个SQL语句对象,并用statement来接收
Statement statement = connection.createStatement();

step5.定义SQL语句

1
2
//定义SQL修改语句,插入一条新数据
String sql1 = "insert into `student` (Name,English,Math,Computer) values ('scofield','45','89','100')";

step6.查询执行SQL语句后的结果

1
2
3
//执行查询SQL语句,查看返回结果
String sql2 = "select * from student";
ResultSet resultSet = statement.executeQuery(sql2);

step7.释放连接

1
2
3
4
//关闭数据库连接
resultSet.close();
statement.close();
connection.close();
  • 向student表中添加一条记录

    这里主要用到的SQL代码如下,

1
2
3
//定义了SQL修改语句,插入一条新数据,并返回查询结果
String sql1 = "insert into `student`(Name,English,Math,Computer) values ('scofield','45','89','100')";
String sql2 = "select * from student";

控制台返回的结果:

img_202210140930818

完整代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
public class MainActivity {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//1.加载JDBC驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//2.定义用户信息和URL参数,连接MySQL用
String url = "jdbc:mysql://localhost:3306/studentdb";
String user = "root";
String password = "root";
//3.连接数据库,使用驱动管理类;connection就表示数据库
Connection connection = DriverManager.getConnection(url, user, password);

//判断一下数据库连接状态
if(connection == null){
System.out.println("连接失败!");
}else{
System.out.println("连接成功!");
//4.创建一个SQL语句对象,并用statement来接收
Statement statement = connection.createStatement();
//5.定义SQL修改语句,插入一条新数据
String sql1 = "insert into `student` (Name,English,Math,Computer) values ('scofield','45','89','100')";
//判断数据库是否修改成功,根据受影响的行数 >= 1,即修改成功
if(statement.executeUpdate(sql1) >= 1){
System.out.println("数据插入成功!");
//6.执行查询SQL语句,查看返回结果
String sql2 = "select * from student";
ResultSet resultSet = statement.executeQuery(sql2);
System.out.println("student表中数据如下:");
System.out.println("Name"+"\t"+"English"+"\t"+"Math "+"Computer");
while (resultSet.next()){
System.out.print(resultSet.getString("Name")+"\t");
System.out.print(resultSet.getInt("English")+"\t");
System.out.print(resultSet.getInt("Math")+"\t");
System.out.println(resultSet.getInt("Computer")+"\t");
}
//7.关闭数据库连接
resultSet.close();
statement.close();
connection.close();
}else {
System.out.println("数据插入失败!");
}
}
}
}
  • 获取scofield的English成绩信息

    数据库连接的前3步操作一样,这里需要更改查询语句,并返回查询结果。

    这里主要用到的SQL代码如下,

    1
    2
    //定义SQL查询语句,查询scofield的English成绩
    String sql = " select Name,English from student where Name = 'scofield'";

控制台返回的结果:

img_202210140931911

完整代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
public class SelectResults {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//1.加载JDBC驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//2.定义用户信息和URL参数,连接MySQL用
String url = "jdbc:mysql://localhost:3306/studentdb";
String user = "root";
String password = "root";
//3.连接数据库,使用驱动管理类;connection就表示数据库
Connection connection = DriverManager.getConnection(url, user, password);

//判断一下数据库连接状态
if(connection == null){
System.out.println("连接失败!");
}else{
System.out.println("连接成功!");
//4.创建一个SQL语句对象,并用statement来接收
Statement statement = connection.createStatement();
//5.定义SQL查询语句,查询scofield的English成绩
String sql = " select Name,English from student where Name = 'scofield'";
//判断数据库是否查询成功,当返回结果不为空时,即查询成功
ResultSet resultSet = statement.executeQuery(sql);
if(resultSet != null){
System.out.println("成绩查询成功!");
//6.执行查询SQL语句,查看返回结果
System.out.println("student表中查询结果如下:");
System.out.println("Name"+"\t"+"English");
while (resultSet.next()){
System.out.print(resultSet.getString("Name")+"\t");
System.out.print(resultSet.getInt("English")+"\t");
}
//7.关闭数据库连接
resultSet.close();
statement.close();
connection.close();
}else {
System.out.println("成绩查询失败!");
}
}
}
}

三、遇到的问题及解决方案

1、找MySQL连接Java的驱动包

  • 问题描述

    参考网络上绝大部分Java操作MySQL的教程,都是使用jar驱动包来操作。

    操作教程可参考菜鸟教程上的Java连接MySQL的操作,下载好驱动包后,用添加库的方式导入到对应项目中。最新版下载地址为:http://dev.mysql.com/downloads/connector/j/,解压后得到 jar 库文件,然后在对应的项目中导入该库文件。尴尬的是进入官网后并没有找到对应自己版本的MySQL驱动包,我用的是8.0.30版本,应该是目前最新的版本,官网并未提供该版本的驱动包,这简直让我蚌埠住了。

    img_202210140935328

  • 解决方案

    幸运的是我之前做过Java操作MongoDB数据库连接的案例,导库方式采用的是maven库的依赖文件(在maven官网也可在里面下载jar包,这里更推荐用依赖文件)。想必Java与数据库连接过程大体类似,索性就看了下相关的Java使用maven项目s来操作MySQL的教程,确实可以这样操作。于是就有了前面新建maven工程的方式来连接MySQL。需要注意的是,添加依赖代码时需要加上,然后刷新一下maven库,否则会出现报错。

    img_202210140935637

2、JDBC中——Class.forName(com.mysql.cj.jdbc.Driver)

MySQL 8.0 以上版本的数据库连接有所不同:

com.mysql.jdbc.Driver 更换为 com.mysql.cj.jdbc.Driver

​ 若使用以下代码,程序可以返回正确结果,但程序会抛出异常。更改为com.mysql.cj.jdbc.Driver可以解决。

1
2
//加载JDBC驱动
Class.forName("com.mysql.cj.jdbc.Driver");

​ 对Class.forName(com.mysql.cj.jdbc.Driver)的深入理解,可以参考这篇文章:

jdbc(2)——之Class.forName(com.mysql.cj.jdbc.Driver)理解