0


JDBC-MYSQL 图书商城系统-附源码

JDBC-Book 图书商城系统

1.前言

刚刚学习完JDBC的一些基础,想记录一下自己的学习过程分享给大家。

此次我将要完成对如下数据库进行增删改查:
在这里插入图片描述

我用的开发工具是idea 2021.1.4旗舰版。

数据库是Mysql,此项目需要一个数据库的jar包,参考如下:

https://dev.mysql.com/downloads/

选择连接器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Omgr8quy-1649403360462)(F:\typora图\image-20220408113520513.png)]

不是最新版的话就选择 Archives

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UIibeJwF-1649403360462)(F:\typora图\image-20220408113638574.png)]

自行选择对应的版本,然后选中这个。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9oc8YhVh-1649403360463)(F:\typora图\image-20220408114004875.png)]

下载压缩包

在这里插入图片描述

解压缩,我们需要的是这个jar文件。

在这里插入图片描述

项目开始

1.在idea新建一个java项目(jdbc-book)

在这里插入图片描述

src文件可以删掉。

在根目录新建一个lib文件夹引入jar包,将上面下载的jar包复制到lib中

在这里插入图片描述

右键lib选择Add as Library

在这里插入图片描述

在这里插入图片描述

这样jar包就引入了。

2.新建一个Module(book-jdbc)

在这里插入图片描述

3.完成菜单显示

在src新建一个class (com.yk.book.controller.Menu)类

在这里插入图片描述

在类中输入:

//显示菜单Scanner input =newScanner(System.in);// 菜单/*
        return slt    返回用户的选择
     */publicintshowMenu(){System.out.println("============欢迎使用图书商城系统============");System.out.println("1.查看图书列表");System.out.println("2.添加图书库存信息");System.out.println("3.查看特定图书信息");System.out.println("4.图书下架");System.out.println("5.退出");System.out.println("========================================");System.out.print("请选择:");int slt = input.nextInt();return slt;

在同目录下新建一个main 调用Menu:(主函数)

packagecom.yk.book.controller;publicclassMain{publicstaticvoidmain(String[] args){Menu m =newMenu();boolean flag =true;// 先死循环,后面通过判断用户是否退出。while(flag){//调用显示主菜单的方法int slt = m.showMenu();switch(slt){case1:break;case2:break;case3:break;case4:break;case5:break;default:System.out.println("好好选,别调皮");break;}}System.out.println("谢谢使用!");}}

运行此文件可以看到:

在这里插入图片描述

4.退出程序功能

当用户选择功能5时,即退出此程序

在Menu文件中写入 exit方法

equalsIgnoreCase: 忽略大小写比较。 返回值是一个布尔类型,若用户决定退出,则将flag修改为false,退出程序。

// 退出publicbooleanexit(){System.out.print("是否确认退出?(Y/N) ");String slt = input.next();return!"Y".equalsIgnoreCase(slt);}

在Main函数中调用exit()

case5:
     flag = m.exit();break;

进行测试,运行程序,输入5,将会得到如下画面,说明这一步已经完成了

在这里插入图片描述

5.书写图书类

在src.com.book新建一个pojo.Book

在这里插入图片描述

引入get/set方法,我这里的快捷键是 alt+fn+insert.

package com.yk.book.pojo;

public class Book {
    // 私有属性
    private Integer id;
    private String name;
    private Integer price;
    private Integer count;
    private String publisher;

    public Book() {
    }
    
    
    public Book(Integer id, String name, String publisher) {
        this.id = id;
        this.name = name;
        this.publisher = publisher;
    }

    public Book(Integer id, String name, Integer price, Integer count, String publisher) {
        this.id = id;
        this.name = name;
        this.price = price;
        this.count = count;
        this.publisher = publisher;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getPrice() {
        return price;
    }

    public void setPrice(Integer price) {
        this.price = price;
    }

    public Integer getCount() {
        return count;
    }

    public void setCount(Integer count) {
        this.count = count;
    }

    public String getPublisher() {
        return publisher;
    }

    public void setPublisher(String publisher) {
        this.publisher = publisher;
    }

    @Override
    public String toString() {
        return id +"\t\t" + name +"\t\t" + price + "\t\t" + count + "\t\t" + publisher ;
    }
}

6.接口

在scr.yk.com.DAO.impl见一个接口文件BookDAO

接口(Interface)从本质上讲是一个抽象类

在这里插入图片描述

完成各个功能的接口

package com.yk.book.DAO.impl;

import com.yk.book.pojo.Book;

import java.util.List;

public interface BookDAO {
    // 查询库存列表
    List<Book> getBookList();

    // 新增库存
    boolean addBook(Book book);

    // 修改库存
    boolean updateBook(Book book);

    // 根据名称查询特定排序
    Book getBookByName(String name);

    // 删除特定库存记录
    boolean delBook(String name);
}

然后在同目录下新建一个BookDAOImpl,在这里完成增删改查。

在这里插入图片描述

7.功能实现

1.展示图书列表

1.连接驱动 Class.forName(“com.mysql.cj.jdbc.Driver”);

在这里插入图片描述

2.创建驱动管理器 (数据库url,用户名,密码)

​ Connection conn = DriverManager.getConnection(URL,‘root’,‘p123456’);

3.编写sql语句查询 String sql = “selec * from t_book”;

4.创建预处理命令 PreparedStatement psmt = conn.prepareStatement(sql);

5.执行查询 ResultSet rs = psmt.executeQuery(); 返回查询的行数

6.数据解析

在BookDAOImpl中写入,返回值是一个list

ResultSet rs;PreparedStatement psmt;Connection conn;finalString URL ="jdbc:mysql://localhost:3306/book?useSSL=false";@OverridepublicList<Book>getBookList(){List<Book> bookList =newArrayList<>();try{// 1.连接驱动Class.forName("com.mysql.cj.jdbc.Driver");// 2.创建驱动管理器
            conn =DriverManager.getConnection(URL,"root","p123456");// 3.编写SQL语句(查询)String sql ="select * from t_book";// 4.创建预处理命令
            psmt = conn.prepareStatement(sql);// 5.执行查询
            rs = psmt.executeQuery();// 6.数据解析while(rs.next()){int id = rs.getInt(1);String name = rs.getString(2);int price = rs.getInt(3);int count = rs.getInt(4);String publisher = rs.getString(5);Book book =newBook(id,name,price,count,publisher);
                bookList.add(book);}return bookList;}catch(ClassNotFoundException e){
            e.printStackTrace();}catch(SQLException throwables){
            throwables.printStackTrace();}finally{//关闭try{if(rs !=null){
                    rs.close();}if(psmt!=null){
                    psmt.close();}if(conn!=null&&!conn.isClosed()){
                    conn.close();}}catch(SQLException throwables){
                throwables.printStackTrace();}}returnnull;}

7.在Menu菜单中完成showBookList()方法

BookDAO bookDAO =newBookDAOImpl();// 查看图书列表publicvoidshowBookList(){// 获取所有的图书List<Book> bookList = bookDAO.getBookList();System.out.println("===========================================");System.out.println("编号\t\t名称\t\t单价\t\t库存\t\t出版社");// 判断是否有数据if(bookList ==null|| bookList.size()<=0){System.out.println("对不起,库存为空");}else{for(int i =0; i < bookList.size(); i++){Book book = bookList.get(i);System.out.println(book);//默认调用Book里面的String方法,}}System.out.println("===========================================");System.out.print("任意键继续:");
        input.next();}

8.在主函数中调用

case1:
    m.showBookList();break;

9.运行程序,测试,输入1:

在这里插入图片描述

看到此结果,说明查看图书列表功能已经完成。

2.添加图书

添加图书的时候,我们需要用到查询单个图书的功能,如果该图书存在,则追加库存量;若不存在,则添加该图书。

在bookDAOImpl中书写代码

1.添加

@OverridepublicbooleanaddBook(Book book){try{Class.forName("com.mysql.cj.jdbc.Driver");Connection conn =DriverManager.getConnection(URL,"root","p123456");// 插入 语句String sql ="insert into t_book values(0,?,?,?,?)";PreparedStatement psmt = conn.prepareStatement(sql);// 赋值
        psmt.setString(1,book.getName());
        psmt.setInt(2,book.getPrice());
        psmt.setInt(3,book.getCount());
        psmt.setString(4,book.getPublisher());return psmt.executeUpdate()>0;}catch(ClassNotFoundException|SQLException e){
        e.printStackTrace();}finally{// 关闭try{if(psmt!=null){
                psmt.close();}if(conn!=null&&!conn.isClosed()){
                conn.close();}}catch(SQLException throwables){
            throwables.printStackTrace();}}returnfalse;}
@OverridepublicbooleanupdateBook(Book book){try{Class.forName("com.mysql.cj.jdbc.Driver");
            conn =DriverManager.getConnection(URL,"root","p123456");// 更新的sql语句String sql ="update t_book set count = ? where id = ?";// 赋值
            psmt = conn.prepareStatement(sql);
            psmt.setInt(1,book.getCount());
            psmt.setInt(2,book.getId());return psmt.executeUpdate()>0;}catch(ClassNotFoundException|SQLException e){
            e.printStackTrace();}finally{// 关闭try{if(psmt!=null){
                    psmt.close();}if(conn!=null&&!conn.isClosed()){
                    conn.close();}}catch(SQLException throwables){
                throwables.printStackTrace();}}returnfalse;}
@OverridepublicBookgetBookByName(String name){try{Class.forName("com.mysql.cj.jdbc.Driver");
            conn =DriverManager.getConnection(URL,"root","p123456");// 查询单本图书String sql ="select * from t_book where name like ?";// 赋值
            psmt = conn.prepareStatement(sql);
            psmt.setString(1,name);// 数据解析
            rs = psmt.executeQuery();if(rs.next()){int id = rs.getInt(1);int price = rs.getInt(3);int count = rs.getInt(4);String publisher = rs.getString(5);// 返回一个book对象returnnewBook(id,name,price,count,publisher);}}catch(ClassNotFoundException|SQLException e){
            e.printStackTrace();}finally{// 关闭try{if(rs !=null){
                    rs.close();}if(psmt!=null){
                    psmt.close();}if(conn!=null&&!conn.isClosed()){
                    conn.close();}}catch(SQLException throwables){
                throwables.printStackTrace();}}returnnull;}

接着在Menu菜单中写添加图书代码

// 添加图书publicvoidaddBook(){System.out.print("请输入图书名称:");String name = input.next();Book book = bookDAO.getBookByName(name);// 图书不存在时,新建一个if(book ==null){System.out.print("请输入图书单价:");int price = input.nextInt();System.out.print("请输入图书库存量:");int count = input.nextInt();System.out.print("请输入图书出版社:");String publisher = input.next();// 封装一个图书对象
            book =newBook(0,name,price,count,publisher);// 调用添加接口
            bookDAO.addBook(book);}else{// 图书存在,则追加库存量System.out.print("请输入追加的库存量:");int count = input.nextInt();
            book.setCount(book.getCount()+count);// 调用DAO的修改方法
            bookDAO.updateBook(book);}}

最后在主函数中调用:

case2:
    m.addBook();break;

代码写完了,接着我们进行测试,输入2:

在这里插入图片描述

可以看到,高等数学这本书已经被添加了。、

3.查看特定图书信息

这功能的接口在添加图书已经写过了

我们通过一个图书名称去数据查询,返回值是一个book对象

如果图书存在,则打印图书信息,若不存在,则告诉用户没有这本书。

我们直接在Menu菜单中书写代码

// 查看特定图书publicvoidviewOneBook(){System.out.print("请输入图书名称:");String name = input.next();// 调用查询单个图书接口Book book =bookDAO.getBookByName(name);// 如果图书不存在if(book ==null){System.out.println("对不起,没有找到指定的图书记录!");}else{System.out.println("=======================================");System.out.println("编号\t\t名称\t\t单价\t\t库存\t\t出版社");System.out.println(book);System.out.println("=======================================");}System.out.print("任意键继续:");
        input.next();}

接着我们在主函数调用

case3:
    m.viewOneBook();break;

输入3:

在这里插入图片描述

看到这样的结果,我们就还是顺利的。

4.图书下架

@OverridepublicbooleandelBook(String name){try{Class.forName("com.mysql.cj.jdbc.Driver");
            conn =DriverManager.getConnection(URL,"root","p123456");// 删除的sql语句String sql ="delete from t_book where name like ?";
            psmt = conn.prepareStatement(sql);
            psmt.setString(1,name);return psmt.executeUpdate()>0;}catch(ClassNotFoundException|SQLException e){
            e.printStackTrace();}finally{try{if(rs !=null){
                    rs.close();}if(psmt!=null){
                    psmt.close();}if(conn!=null&&!conn.isClosed()){
                    conn.close();}}catch(SQLException throwables){
                throwables.printStackTrace();}}

在Menu菜单中书写删除代码:

// 删除publicvoiddelBook(){System.out.print("请输入要删除图书名称:");String name = input.next();Book book = bookDAO.getBookByName(name);if(book==null){System.out.println("对不起,没有找到需要删除的图书信息!");}else{System.out.print("是否确认删除(Y/N):");String slt = input.next();if("y".equalsIgnoreCase(slt)){// 调用删除接口
                bookDAO.delBook(name);System.out.println("删除成功");}}}

在主函数调用:

case4:
    m.delBook();break;

最后,我们测试一下功能,输出4:

在这里插入图片描述

可以看到,计算机网络已经被删除了。

3.结语

到此,这个项目就结束了。生命不息,学习不止。

最后看一下项目的目录吧

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9ivWy26f-1649403360476)(F:\typora图\image-20220408153403964.png)]

源码链接

链接:https://pan.baidu.com/s/12Tc2BYbdUY1nG5DHh2mvJw?pwd=tysm
提取码:tysm

侵删致歉!

标签: intellij idea java

本文转载自: https://blog.csdn.net/m0_57786140/article/details/124042999
版权归原作者 kaikaiccc 所有, 如有侵权,请联系我们删除。

“JDBC-MYSQL 图书商城系统-附源码”的评论:

还没有评论