【Java入门到精通】(五)初识MySql数据库
一、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语句的使用
-- 查询数据
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插入数据
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认证机制-不使用 falseuseUnicode:是否使用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类
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对象
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();// 发送SQLResultSet 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();// 发送SQLResultSet 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();// 发送SQLint n = stmt.executeUpdate("delete from t_book where id = " + bno);// 处理结果// 关闭资源stmt.close();conn.close();return n;}
}