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 = new Scanner(System.in);// 菜单/*return slt    返回用户的选择*/public int showMenu(){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:(主函数)

package com.yk.book.controller;public class Main {public static void main(String[] args) {Menu m = new Menu();boolean flag = true;    // 先死循环,后面通过判断用户是否退出。while(flag){//调用显示主菜单的方法int slt = m.showMenu();switch (slt){case 1:break;case 2:break;case 3:break;case 4:break;case 5:break;default:System.out.println("好好选,别调皮");break;}}System.out.println("谢谢使用!");}
}

运行此文件可以看到:

在这里插入图片描述

4.退出程序功能

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

在Menu文件中写入 exit方法

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

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

在Main函数中调用exit()

case 5: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;}@Overridepublic 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 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;final String URL = "jdbc:mysql://localhost:3306/book?useSSL=false";@Overridepublic List<Book> getBookList() {List<Book> bookList = new ArrayList<>();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 = new Book(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();}}return null;}

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

	BookDAO bookDAO = new BookDAOImpl();// 查看图书列表public void showBookList(){// 获取所有的图书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.在主函数中调用

case 1:m.showBookList();break;

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

在这里插入图片描述

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

2.添加图书

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

在bookDAOImpl中书写代码

1.添加

@Override
public boolean addBook(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();}}return false;
}
	@Overridepublic boolean updateBook(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();}}return false;}
 	@Overridepublic Book getBookByName(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对象return new Book(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();}}return null;}

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

	// 添加图书public void addBook(){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 = new Book(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);}}

最后在主函数中调用:

case 2:m.addBook();break;

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

在这里插入图片描述

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

3.查看特定图书信息

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

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

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

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

	// 查看特定图书public void viewOneBook(){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();}

接着我们在主函数调用

case 3:m.viewOneBook();break;

输入3:

在这里插入图片描述

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

4.图书下架

	@Overridepublic boolean delBook(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菜单中书写删除代码:

	// 删除public void delBook(){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("删除成功");}}}

在主函数调用:

case 4:m.delBook();break;

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

在这里插入图片描述

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

3.结语

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

最后看一下项目的目录吧

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

源码链接

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

侵删致歉!


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部