一、MySql介绍
1.1 程序交互过程

1.2 MySql的介绍
MySql数据库最初是由MySql AB公司开发,2008年1月16号被Sun公司收购。2009年,SUN又被Oracle收购。
用于MySql数据库体积小,速度快,成本低,跨平台,开放源码等优点,现已被广泛应用于互联网上的中小型网站中,并且大型网站也开始使用MySql数据库,如网易、新浪等。
1.3 MySql下载
https://dev.mysql.com/downloads/installer/https://dev.mysql.com/downloads/installer/
1.4 MySql的安装














二、MySql的使用
2.1 SQL介绍
SQL(Structured Query Language)是一种操作数据库的语言。
在数据库管理系统中,使用SQL语言来实现数据的存取、查询、更新等功能。
SQL是一种非过程化语言,只需要提出"做什么",而不需要指明"怎么做"。
2.2 表介绍
表(Table)是数据库中数据存最常见和最简单的一种形式,数据库可以将复杂的数据结构用较为简单的二维表来标识。二维表是由行和列组成的,分别都包含着数据
书籍编号 | 书籍名称 | 书籍作者 | 书籍定价 |
---|---|---|---|
1 | Java基础(上) | 小张 | 100 |
2 | Java基础(下) | 小张 | 200 |
每个表都是由若干行和列组成的,在数据库中表的行为被称为记录 ,表中的列被称为是这些记录的字段。
2.3 使用可视化工具操作MySql
这里由于不可抗因素我是用的是dBeaver可视化工具,可供参考
步骤一:创建数据库
步骤二:创建表


步骤三:增删改查sql语句的使用
sql
-- 查询数据
select * from t_book;
-- 新增数据
insert into t_book (id,name,author,price) values (1,'Java基础','小张',88);
insert into t_book (id,name,author,price) values (2,'《活着》','余华',100);
-- 删除
delete from t_book where id = 2;
-- 修改数据
update t_book set price=50 where id = 1;
update t_book set name='《Java基础》' where id = 1;
-- 查看数据
select * from t_book tb;
select name,author from t_book tb;
select * from t_book tb where price > 60;
三、JDBC技术
3.1 JDBC的介绍
JDBC(Java Database Connectivity - Java数据库连接),是SUN公司定义的一套接口(规范)。

3.2 使用JDBC访问数据库进行编码步骤
(1)加载DIrver驱动
根据你的MySql数据的版本,去下载对应的JDBC的驱动jar包,可以从下面这个网站中寻找
https://downloads.mysql.com/archives/c-j/https://downloads.mysql.com/archives/c-j/

下载完成后,将驱动包引入项目中,并"添加为库"

在程序中加载驱动

(2)使用JDBC插入数据
java
package com.study.test01;
import com.mysql.cj.jdbc.Driver;
import java.sql.*;
public class Test {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
// 加载驱动:
Class.forName("com.mysql.cj.jdbc.Driver");
// 获取连接
String url = "jdbc:mysql://127.0.0.1:3306/study?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true";
/*
=====url中参数含义=====
useSSL:是否使用SSL认证机制-不使用 false
useUnicode:是否使用unicode字符集-使用
characterEncoding=UTF-8:使用unicode的utf-8策略
serverTimezone:时区参数-东八区
allowPublicKeyRetrieval:允许客户端从服务器获取公钥
*/
String username = "root";
String password = "root";
Connection conn = DriverManager.getConnection(url, username, password);
// 创建会话
Statement stmt = conn.createStatement();
// 发送SQL(更新操作)
int i = stmt.executeUpdate("insert into t_book (id,name,author,price) values (3,'红高粱','莫言',49.5)");
// 处理结果
if (i > 0) {// 证明对数据库的数据条数有影响
System.out.println("插入成功");
} else {
System.out.println("插入失败");
}
// 发送SQL(查询sql)
// ResultSet是一个结果集合(数据集)
// ResultSet resultSet = stmt.executeQuery("select * from t_book");
// // 处理结果
// while (resultSet.next()) { // 判断是否有记录存在
// System.out.println(resultSet.getString("id") + "----" + resultSet.getString("name") + "----" + resultSet.getString("author") + "----" + resultSet.getDouble("price"));
// }
// 关闭资源
stmt.close();
conn.close();
}
}
四、项目升级
在实际开发过程中,我们系统中的结构化数据都是存放在数据库中的,所以这里我们将我们之前的【小张书城】升级到数据库的版本,来演示我们在实际开发过程中是如何跟数据库做交互的。
Book类
java
package com.study.test02;
public class Book {
private int id;
private String name;
private String author;
private double price;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
}
Test对象
java
package com.study.test02;
import java.sql.*;
import java.util.ArrayList;
import java.util.Scanner;
public class Test {
public static void main(String[] args) throws SQLException, ClassNotFoundException {
while(true){
// 打印菜单
System.out.println("-------欢迎来到【小张书城】-------");
System.out.println("1.根据书籍编号查询数据信息");
System.out.println("2.查询所有书籍信息");
System.out.println("3.删除指定书籍编号对应的书籍");
System.out.println("4.退出应用");
// 借助Scanner类:
Scanner sc = new Scanner(System.in);
System.out.println("请录入你想要执行的功能序号");
// 利用键盘录入序号
int choice = sc.nextInt(); // 键盘录入数据之后,必须点击回车,程序才能接收这个数据
// 根据choice录入的功能序号进行后续判断
if(choice == 1){
// 录入一个书籍编号
// 给友好的提示
System.out.println("请录入你想要查询的书籍编号");
int bno = sc.nextInt();
// 根据书籍编号查询对应的书籍
try {
Book b = findBookByBno(bno);
// 根据b的结果,来判断书籍是否查到
if(b == null){
System.out.println("您想要查询的书籍不存在");
} else {
System.out.println("当前查询到一本书:"+b.getName());
}
} catch (ClassNotFoundException e) {
System.out.println("数据库连接出错>>>>>>>>");
}
}
if (choice == 2){
// 查询所有书籍信息
ArrayList books = findBooks();
if(books.size() == 0){
System.out.println("没有查询到书籍");
} else {
for (int i = 0; i < books.size(); i++) {
Book b = (Book) books.get(i);
System.out.println(b.getId() + "----" + b.getName() + "----" + b.getAuthor() + "----" + b.getPrice());
}
}
}
if (choice == 3){
// 录入删除的书籍的编号
System.out.println("请录入你想要删除的书籍编号");
// 利用键盘录入序号
int bno = sc.nextInt(); // 键盘录入数据之后,必须点击回车,程序才能接收这个数据
// 根据choice录入的功能序号进行后续判断
int n = delBookByBno(bno);
if (n<=0) {
System.out.println("删除失败");
} else {
System.out.println("删除成功");
}
}
if (choice == 4){
System.out.println("【小张书城】程序退出中...");
break;
}
}
}
// 定义查询数据库的方法
// 根据编号查询对应的书籍
public static Book findBookByBno(int bno) throws ClassNotFoundException, SQLException {
Book b = null;
// 加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 获取连接
String url = "jdbc:mysql://127.0.0.1:3306/study?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true";
String username = "root";
String password = "root";
Connection conn = DriverManager.getConnection(url, username, password);
// 创建会话
Statement stmt = conn.createStatement();
// 发送SQL
ResultSet rs = stmt.executeQuery("select * from t_book where id = " + bno);
// 处理结果
if(rs.next()){ // 如果结果只有一条,想要获取的话,写if就可以
// 接收返回的数据
int id = rs.getInt("id");
String name = rs.getString("name");
String author = rs.getString("author");
double price = rs.getDouble("price");
b = new Book();
// 将返回值封装成一个书籍Book对象进行返回
b.setId(id);
b.setName(name);
b.setAuthor(author);
b.setPrice(price);
}
// 关闭资源
stmt.close();
conn.close();
return b;
}
// 查询所有书籍
public static ArrayList findBooks() throws ClassNotFoundException, SQLException {
// 定义一个集合
ArrayList<Book> books = new ArrayList<Book>();
Book b = null;
// 加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 获取连接
String url = "jdbc:mysql://127.0.0.1:3306/study?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true";
String username = "root";
String password = "root";
Connection conn = DriverManager.getConnection(url, username, password);
// 创建会话
Statement stmt = conn.createStatement();
// 发送SQL
ResultSet rs = stmt.executeQuery("select * from t_book");
// 处理结果
while (rs.next()) {
// 接收返回的数据
int id = rs.getInt("id");
String name = rs.getString("name");
String author = rs.getString("author");
double price = rs.getDouble("price");
b = new Book();
// 将返回值封装成一个书籍Book对象进行返回
b.setId(id);
b.setName(name);
b.setAuthor(author);
b.setPrice(price);
// 将书籍放到集合中
books.add(b);
}
// 关闭资源
stmt.close();
conn.close();
return books;
}
// 根据编号删除对应的书籍
public static int delBookByBno(int bno) throws ClassNotFoundException, SQLException {
// 加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 获取连接
String url = "jdbc:mysql://127.0.0.1:3306/study?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true";
String username = "root";
String password = "root";
Connection conn = DriverManager.getConnection(url, username, password);
// 创建会话
Statement stmt = conn.createStatement();
// 发送SQL
int n = stmt.executeUpdate("delete from t_book where id = " + bno);
// 处理结果
// 关闭资源
stmt.close();
conn.close();
return n;
}
}