zoukankan      html  css  js  c++  java
  • 使用JDBC创建出版社和书籍管理系统

    1.需求

    已知如下两个表:
    publisher id name(唯一) address
    book id isbn name publisher_id
    欢迎进入书籍管理系统
    1.出版社管理:增、删(name)、改(name)、查(name)
    2.书籍管理:增、删(name)、改(name)、查(name)
    3.退出
    1
    2
    3
    4
    5
    6
    7
    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)
    )
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    关于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
    DBUtil和IRowMapper查看
    https://blog.csdn.net/qq_44724446/article/details/89918464
    当时未考虑到SQL注入的情况,所以补充代码,引入PreparedStatement接口的概念,

    //关于防止sql注入的步骤参考如下
    http://www.cnblogs.com/flei/p/6727520.html
    1
    2
    创建36位UUID的工具类

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

    1
    2
    3
    4
    5
    6
    7
    创建用于出版社系统实现增删改查的封装类

    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方法
    @Override
    public 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;
    @Override
    public 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 {
    @Override
    public 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);
    }
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    创建用于书籍系统实现增删改查的封装类
    注意外键约束

    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;
    }
    // 如果选择的出版社存在,根据出版社名字获取出版社id
    String 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;
    }
    // 如果选择的出版社存在,根据出版社名字获取出版社id
    String 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 {
    @Override
    public 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 {
    @Override
    public 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;
    @Override
    public 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;
    }
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    创建系统的主方法

    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();
    }
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28

  • 相关阅读:
    关注底层:IL部分
    腾讯与敏捷开发(zz)
    关于腾讯敏捷框架TAPD (ZZ)
    最新苹果官方iphone sdk 与 xcode 下载网址汇总
    松山湖之行
    [zz]在C#程序中实现插件架构
    华为与敏捷(zz)
    OK6410 tftp下载内核、文件系统以及nand flash地址相关整理、总结
    T400换风扇解决开机fan error问题
    校园故事一个非典型工科男的电子设计之路(整理版)
  • 原文地址:https://www.cnblogs.com/hyhy904/p/10962028.html
Copyright © 2011-2022 走看看