1.需求

已知如下两个表:publisher id name(唯一) addressbook id isbn name publisher_id欢迎进入书籍管理系统1.出版社管理:增、删(name)、改(name)、查(name)2.书籍管理:增、删(name)、改(name)、查(name)3.退出

2.log4j.properties 为什么
3.db.properties 为什么
4.PropertiesUtil
5.DBUtil
6.IRowMapper
7.PublisherManager
8.BookManager
9.Client
一.首先在mysql数据库软件中建立如下两个表

create table publisher(id char(36) primary key,name varchar(24) unique,address varchar(120)
)
create table book(id char(36) primary key,isbn varchar(12) unique,name varchar(24),publisher_id char(36),foreign key(publisher_id) references publisher(id)
)

关于SQL语句中约束的知识在下面博客中提及过
https://blog.csdn.net/qq_44724446/article/details/90027794
https://blog.csdn.net/qq_44724446/article/details/90031272
log4j为什么用如何配置,查看
https://blog.csdn.net/qq_44724446/article/details/90044781
properties为什么用,如何配置,java代码的实现-封装的工具类PropertiesUtil查看
https://blog.csdn.net/qq_44724446/article/details/90048065
DBUtilIRowMapper查看
https://blog.csdn.net/qq_44724446/article/details/89918464
当时未考虑到SQL注入的情况,所以补充代码,引入PreparedStatement接口的概念,

//关于防止sql注入的步骤参考如下
http://www.cnblogs.com/flei/p/6727520.html

创建36位UUID的工具类

import java.util.UUID;
public class StringUtil {public static String getId() {return UUID.randomUUID().toString();}
}

创建用于出版社系统实现增删改查的封装类

import java.sql.ResultSet;
import java.util.Scanner;
public class PublisherManager {static Scanner sc= new Scanner(System.in);/*** 出版社管理*/public static void pManager() {System.out.println("请输入出版社管理操作:");System.out.println("1.添加出版社信息");System.out.println("2.删除出版社信息");System.out.println("3.修改出版社信息");System.out.println("4.查询出版社信息");System.out.println("请输入操作,按enter键结束");int option = sc.nextInt();switch (option) {case 1:pInsert();break;case 2:pDelete();break;case 3:pUpdate();break;case 4:pSelect();break;default:System.out.println("Sorry,there is not the " + option + " option,请重新输入选择:");break;}}/*** 添加出版社信息*/public static void pInsert() {String id = StringUtil.getId();System.out.println("请输入要添加的出版社的名字");String name = sc.next();if (new PublisherManager().exit(name)) { // 判断出版社是否存在System.out.println("出版社名字不允许重复,无法添加,操作停止");return;}System.out.println("请输入要添加的出版社的地址");String address = sc.next();String sql = "insert into publisher (id,name,address) values (?,?,?)";if (DButil.upDate(sql, id, name, address)) {System.out.println("添加信息成功");return;}System.out.println("系统错误,添加信息失败");}/*** 删除出版社信息*/public static void pDelete() {    System.out.println("请输入要删除的出版社的名字");String name = sc.next();if (!new PublisherManager().exit(name)) { // 判断出版社是否存在,不存在没办法删除System.out.println("出版社名字不存在,无法删除,操作停止");return;}String sql = "delete from publisher where name=?";if (DButil.upDate(sql, name)) {System.out.println("删除信息成功");return;} else {System.out.println("系统错误,删除信息失败");} }/*** 修改出版社信息*/public static void pUpdate() {     System.out.println("请输入要修改的出版社的名字:");String name = sc.next();if (!new PublisherManager().exit(name)) { // 判断出版社是否存在,不存在没办法修改System.out.println("出版社名字不存在,无法修改,操作停止");return;}System.out.println("请输入修改后出版社的名字:");String rename = sc.next();System.out.println("请输入修改后出版社的地址");String address = sc.next();String sql = "update publisher set name=?,address=? where name=?";if (DButil.upDate(sql, rename, address, name)) {System.out.println("修改信息成功");return;} else {System.out.println("系统错误,修改信息失败");}System.out.println(sql);}/*** 查找出版社信息*/public static void pSelect() {System.out.println("请输入要查找的出版社的名字:");String name = sc.next();String sql = "select * from publisher where name=?";// RowMapper类实现IRowMapper接口class RowMapper implements IRowMapper {// 重写IRowMapper接口中的rowMapper方法@Overridepublic void rowMapper(ResultSet rs) {try {// 对数据库中的数据逐条查询if (rs.next()) { // 因为出版社名字具有唯一性// 根据不同的表的列名可以在getString// 对于不同的表可以在getString方法中传入不同的参数String id = rs.getString("id");String name = rs.getString("name");String address = rs.getString("address");System.out.println("查询信息成功,信息为:");System.out.println("出版社id为:" + id + ",出版社名字为:" + name + ",出版社地址为:" + address);return;} else {System.out.println("出版社不存在");}} catch (Exception e) {e.printStackTrace();}}}// 创建RowMapper对象RowMapper rowMapper = new RowMapper();DButil.sel(rowMapper,sql , name);}/*** 根据名字判断出版社是否存在*/public boolean exit(String name) {return getId(name) != null;}/*** 获取出版社id*/public String getId(String name) {String sql = "select id from publisher where name=?";class RowMapper implements IRowMapper {String id;@Overridepublic void rowMapper(ResultSet rs) {try {if (rs.next()) {id = rs.getString("id");}} catch (Exception e) {e.printStackTrace();}}}RowMapper rowMapper = new RowMapper();DButil.sel(rowMapper, sql, name); // 防注入,回调return rowMapper.id;}/*** 展示出出版社所有的信息*/public static void show() {System.out.println("展示出版社所有的信息:");String sql = "select * from publisher";class RowMapper implements IRowMapper {@Overridepublic void rowMapper(ResultSet rs) {try {while (rs.next()) {String id = rs.getString("id");String name = rs.getString("name");String address = rs.getString("address");System.out.println(id + "," + name + "," + address);}} catch (Exception e) {e.printStackTrace();}}}RowMapper rowMapper = new RowMapper();DButil.sel(rowMapper, sql);}
}

创建用于书籍系统实现增删改查的封装类
注意外键约束

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;
public class BookManager {static Scanner sc = new Scanner(System.in); /*** 书籍管理功能界面*/public static void bManager() {System.out.println("请输入图书管理操作:");System.out.println("1、添加书籍信息");System.out.println("2、删除书籍信息");System.out.println("3、修改书籍信息");System.out.println("4、查询书籍信息");int option = sc.nextInt();switch (option) {case 1:bInsert();break;case 2:bDelete();break;case 3:bUpdate();break;case 4:{System.out.println("请选择查询方式:");System.out.println("1.根据书名罗列查询");System.out.println("2.根据ISBN唯一查询");option = sc.nextInt();switch (option) {case 1:bSelect();break;case 2:bQuery();break;default:System.out.println("无效操作,请重新输入选择查询方式:");break;}break;}default:System.out.println("无效操作");break;}}/*** 添加书籍信息*/public static void bInsert() {System.out.println("请输入要添加的书籍的条形编码:");String isbn = sc.next();// 判断ISBN是否存在if (exit(isbn)) {System.out.println("ISBN不允许重复,无法添加,操作停止");return;}System.out.println("请输入要添加的书籍的名字:");String name = sc.next();// 调用util工具类中的StringUtil类获取36位系统自动生成的UUID组成的id号String id = StringUtil.getId();// 将出版社的所有信息展示出来PublisherManager.show();System.out.println("请选择书籍所属的出版社名字:");String pName = sc.next();if (!new PublisherManager().exit(pName)) {System.out.println("您输入的出版社名字错误,停止操作");return;}// 如果选择的出版社存在,根据出版社名字获取出版社idString pId = new PublisherManager().getId(pName);// 添加book数据库表信息String sql = "insert into book (id,isbn,name,publisher_id) values (?,?,?,?)";if (DButil.upDate(sql, id, isbn, name, pId)) {System.out.println("添加信息成功");return;} else {System.out.println("系统错误,添加信息失败");}}/*** 删除书籍信息*/public static void bDelete() {System.out.println("请输入要删除书籍ISBN:");String isbn = sc.next();// 判断ISBN是否存在if (!exit(isbn)) {System.out.println("ISBN不存在,无法删除,操作停止");return;}String sql = "delete from book where isbn=?";if (DButil.upDate(sql, isbn)) {System.out.println("删除成功!");} else {System.out.println("系统错误,删除失败!");}}/*** 修改书籍信息*/public static void bUpdate() {System.out.println("请输入要修改书籍的ISBN:");String isbn = sc.next();// 判断ISBN是否存在if (!exit(isbn)) {System.out.println("ISBN不存在,无法修改,操作停止");return;}System.out.println("请输入修改后的书籍的名字:");String rename = sc.next();System.out.println("请输入修改后的书籍的条形编码:");String reIsbn = sc.next();if (exit(reIsbn)) {System.out.println("ISBN已经存在,因为不允许重复所有无法修改,操作停止");return;}// 将出版社的所有信息展示出来PublisherManager.show();System.out.println("请输入修改后书籍所属的出版社名字:");String pName = sc.next();// 判断手动输入的出版社是否存在if (!new PublisherManager().exit(pName)) {System.out.println("您输入的出版社名字错误,停止操作");return;}// 如果选择的出版社存在,根据出版社名字获取出版社idString pId = new PublisherManager().getId(pName);String sql = "update book set name=?,isbn=?,publisher_id=? where isbn=?";if (DButil.upDate(sql, rename, reIsbn, pId, isbn)) {System.out.println("修改成功!");return;} else {System.out.println("系统错误,修改失败!");}}/*** 查找书籍信息  可以查多个*/public static void bSelect() {System.out.println("请输入要查询的书籍的名字:");String name = sc.next();String sql = "select b.id,b.isbn,b.name book_name,p.name publisher_name,p.address " + " from book b "+ " inner join publisher p on p.id=b.publisher_id " + " where b.name like '%"+name +"%'";System.out.println(sql);class RowMapper implements IRowMapper {@Overridepublic void rowMapper(ResultSet rs) {try {while (rs.next()) {String id = rs.getString("id");String isbn = rs.getString("isbn");String bookName = rs.getString("book_name");String publisherName = rs.getString("publisher_name");System.out.println("查询信息成功,信息为:");System.out.println("书籍id为:" + id + "书籍编码" + isbn + ",书籍名字为:" + bookName + ",出版社名字为:" + publisherName);                        }} catch (SQLException e) {e.printStackTrace();}}}RowMapper rowMapper = new RowMapper();DButil.sel(rowMapper,sql );}/*** 根据ISBN查询 唯一性*/public static void bQuery() {System.out.println("请输入要查询的书籍的ISBN:");String ISBN= sc.next();String sql = "select * from book where isbn=?";class RowMapper implements IRowMapper {          @Overridepublic void rowMapper(ResultSet rs) {try {if (rs.next()) {String id = rs.getString("id");String isbn = rs.getString("isbn");String bookName = rs.getString("name");System.out.println("查询信息成功,信息为:");System.out.println("书籍id为:" + id + "书籍编码" + isbn + ",书籍名字为:" + bookName );return;} } catch (SQLException e) {e.printStackTrace();}}}RowMapper rowMapper = new RowMapper();DButil.sel(rowMapper, sql,ISBN);        }/*** 根据ISBN的唯一性判断图书是否存在*/public static boolean exit(String isbn) {String sql = "select id from book where isbn= ? ";class RowMapper implements IRowMapper {boolean state;@Overridepublic void rowMapper(ResultSet rs) {try {if (rs.next()) {state = true;}} catch (Exception e) {e.printStackTrace();}}}RowMapper rowMapper = new RowMapper();DButil.sel(rowMapper,sql , isbn);return rowMapper.state;}
}

创建系统的主方法

import java.util.Scanner;
public class Client {static Scanner sc = new Scanner(System.in);public static void menu() {while (true) {System.out.println("欢迎进入书籍管理系统");System.out.println("1.出版社管理");System.out.println("2.书籍管理");System.out.println("否则,退出系统");System.out.println("请输入操作,按enter键结束");int option = sc.nextInt();switch (option) {case 1:PublisherManager.pManager();break;case 2:BookManager.bManager();break;default:System.out.println("系统结束");System.exit(0);// 退出系统}}}public static void main(String[] args) {menu();}
}

使用JDBC创建出版社和书籍管理系统相关推荐

  1. 基于SSM框架简易项目“书籍管理系统”,超详细讲解,附源码

    目录 我有话说: 1 项目简介 2 项目展示 2.1 首先创建数据库和表信息 2.2 预先准备操作 2.3 开始配置项目 2.4 开始web层 3 图片展示 4 附上源码文件(百度网盘): 我有话说: ...

  2. Django2.0+Bootstrap书籍管理系统

    项目介绍 本篇书籍管理系统的主要功能是简易图书的添加,修改及删除.可作为Django入门者的学习教程.如有错误或者建议,还望多多指教.书籍列表的页面如下: 源码链接:下载 技术工具: Python3. ...

  3. 关于书籍管理系统数据库课程设计

    关于书籍管理系统数据库课程设计 系统概述 该系统用以收集.存储书籍信息.人员(读者.图书管理员)信息.图书借阅信息以及意外处理信息,并及时记录存储各个环节信息的变更,以便管理.查询.显示.输出,以节约 ...

  4. Python学习笔记--10.Django框架快速入门之后台管理admin(书籍管理系统)

    Python学习笔记--10.Django框架快速入门之后台管理 一.Django框架介绍 二.创建第一个Django项目 三.应用的创建和使用 四.项目的数据库模型 ORM对象关系映射 sqlite ...

  5. Django框架快速入门之后台管理admin(书籍管理系统)

    Django框架快速入门之后台管理admin(书籍管理系统) 一.Django框架介绍 什么是框架? 软件框架就是为实现或完成某种软件开发时,提供了一些基础的软件产品, 框架的功能类似于 基础设施 , ...

  6. 基于javaweb的图书馆图书管理借阅书籍管理系统(java+ssm+jsp+html+mysql)

    基于javaweb的图书馆图书管理借阅书籍管理系统(java+ssm+jsp+html+mysql) 运行环境 Java≥8.MySQL≥5.7.Tomcat≥8 开发工具 eclipse/idea/ ...

  7. Java学习:创建简单的名片管理系统

    创建简单的名片管理系统 一.创建名片实体类 二.创建名片管理类 1. 创建主菜单 2. 创建登录方法 3. 创建名片管理方法 5. 添加名片方法 6.创建保存名片方法 7.创建读取名片文件方法 8. ...

  8. 使用jdbc创建一张员工表 员工表字段:编号,姓名,性别,年龄,职位,邮箱,电话

    使用jdbc创建一张员工表 员工表字段:编号,姓名,性别,年龄,职位,邮箱,电话 使用jdbc对员工表执行以下操作: 1)插入一条数据 2)修改一条数据 3)删除一条数据 4)查询并打印所有员工数据 ...

  9. [转载]使用JDBC创建数据库对象

    使用JDBC创建数据库对象 摘要 本文分析了Java DataBase Connectivity (JDBC),一个在 Java 中以面向对象的方法来连接数据库的技术.它是对 ODBC API 进行的 ...

  10. 【实用的开源项目】使用云服务器部署TaleBook,简洁、强大的私人书籍管理系统!

    前言 第三期[实用的开源项目]教程为大家介绍一下 TaleBook ,教大家使用云服务器部署TaleBook,简洁.强大的私人书籍管理系统! 这篇文章是详细的文字版,若希望方便查看视频,请向下滑动,查 ...

最新文章

  1. 如何无缝迁移 SpringCloud/Dubbo 应用到 Serverless 架构
  2. LeetCode 312. 戳气球(DP,难)
  3. 第十二届全国大学生服务外包创新创业大赛总结
  4. Android Studio 4.0 发布
  5. flask中文文档_「Flask系列」 初识Flask
  6. [转载] python 去除字符串中指定字符
  7. python7.2抛出自定义异常
  8. lsoci mysql_【MySQL】InnoDB日志机制深入分析
  9. oracle11g和10的区别,同平台升级 oracle 10 到 oracle11g的一些考虑和实际操作
  10. 解决mysql每天12点的dos弹框
  11. 好玩的手机android游戏,好玩的android手机游戏2018_热门android游戏排行榜
  12. Python - 随机生成英文字母
  13. fopen()函数的整理
  14. Android—在WebView中下载Blob协议文件
  15. power BI 中x轴日期值显示英文改为数值形式
  16. Mycat概述及基本使用
  17. Git命令: rebase 和 squash命令
  18. 共享池 shared pool
  19. 别再傻傻分不清:工业物联网关与PLC采集网关的区别了
  20. 汽车路试数据分析的脚本

热门文章

  1. 程序员超实用网站,留着总有用的着的时候
  2. 如何使用Java以编程方式在Excel中创建数据透视表?
  3. 微信小程序开发上线注意事项
  4. js工具库Ramda和lodash和underscore用法对比
  5. Web前端学习日记3
  6. PC端后台项目的总结
  7. 演绎、归纳与前言结构——Leo鉴书83
  8. Mac破解软件 “XXX”意外退出 奔溃解决方法
  9. MAC右键菜单踩坑——右键在当前目录打开终端
  10. 腾讯云短信服务详细教程