【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语句的使用
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;
    }
}
相关推荐
皮皮林5518 分钟前
Java+Selenium+快代理实现高效爬虫
java
哆啦A梦的口袋呀12 分钟前
pymongo库:简易方式存取数据
数据库·mongodb
城里有一颗星星32 分钟前
6.删除-demo
数据库·go
失重外太空啦1 小时前
Mysql练习
android·数据库·mysql
像风一样自由20201 小时前
Navicat操作指南:MySQL数据库配置与Todo应用部署
数据库·mysql·adb
hqxstudying1 小时前
Java行为型模式---策略模式
java·开发语言·建造者模式·适配器模式·策略模式
lxsy1 小时前
spring-ai-alibaba 简化版NL2SQL
java·nl2sql·spring-ai·ai-alibaba
WanderInk1 小时前
依赖对齐不再“失联”:破解 feign/BaseBuilder 错误实战
java·后端·架构
菜鸡上道1 小时前
Maven入门指南:生命周期、阶段和执行顺序详解
java·maven
青竹易寒1 小时前
Redis技术笔记-从三大缓存问题到高可用集群落地实战
数据库·redis·笔记