Java连接数据库实现图书馆管理系统(详细教程)

该功能用到的软件为 IDEA 、Navicat 、云服务器(非必须)

一、建立数据库

在自己的服务器或者电脑本机安装数据库系统,本次系统演示的数据库版本为5.6。

1.创建图书管理数据库library 字符集为:utf8 -utf8_general_ci

/*
 Navicat Premium Data Transfer

 Source Server         : local
 Source Server Type    : MySQL
 Source Server Version : 50739
 Source Host           : 121.37.205.242:3306
 Source Schema         : library

 Target Server Type    : MySQL
 Target Server Version : 50739
 File Encoding         : 65001

 Date: 31/01/2023 11:23:05
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for amerce
-- ----------------------------
DROP TABLE IF EXISTS `amerce`;
CREATE TABLE `amerce`  (
  `rnumber` char(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '读者编号',
  `rname` varchar(35) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '读者名字',
  `bnumber` int(11) DEFAULT NULL COMMENT '图书编号',
  `bname` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '图书名称',
  `quantity` int(11) DEFAULT 0 COMMENT '数量',
  `bstime` datetime(0) DEFAULT NULL COMMENT '还书和借书时间',
  `money` int(11) DEFAULT NULL COMMENT '罚款金额'
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '罚款信息表' ROW_FORMAT = Compact;

-- ----------------------------
-- Table structure for books
-- ----------------------------
DROP TABLE IF EXISTS `books`;
CREATE TABLE `books`  (
  `number` int(11) NOT NULL AUTO_INCREMENT COMMENT '图书编号',
  `name` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '图书名称',
  `category` int(11) DEFAULT NULL COMMENT '图书类别',
  `author` varchar(35) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '作者',
  `press` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '出版社',
  `pdate` date DEFAULT NULL COMMENT '出版日期',
  `wdate` datetime(0) DEFAULT NULL COMMENT '入库日期',
  `books` int(11) DEFAULT NULL COMMENT '库存总数量',
  `extant` int(11) DEFAULT 0 COMMENT '现存数量',
  PRIMARY KEY (`number`) USING BTREE,
  UNIQUE INDEX `books_name`(`name`) USING BTREE,
  INDEX `books_category`(`category`) USING BTREE,
  CONSTRAINT `books_category` FOREIGN KEY (`category`) REFERENCES `category` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 214 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '图书信息表' ROW_FORMAT = Compact;

-- ----------------------------
-- Table structure for borrow
-- ----------------------------
DROP TABLE IF EXISTS `borrow`;
CREATE TABLE `borrow`  (
  `rnumber` char(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '读者编号',
  `bnumber` int(11) DEFAULT NULL COMMENT '图书编号',
  `quantity` int(11) DEFAULT 1 COMMENT '数量',
  `btime` datetime(0) DEFAULT NULL COMMENT '借书时间'
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '借书信息表' ROW_FORMAT = Compact;

-- ----------------------------
-- Table structure for category
-- ----------------------------
DROP TABLE IF EXISTS `category`;
CREATE TABLE `category`  (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '类别ID',
  `name` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '类别名称',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 51 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '图书类别表' ROW_FORMAT = Compact;

-- ----------------------------
-- Table structure for reader
-- ----------------------------
DROP TABLE IF EXISTS `reader`;
CREATE TABLE `reader`  (
  `number` char(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '学号',
  `name` varchar(35) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '读者名字',
  `sex` varchar(4) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `kind` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '读者种类',
  `rdate` datetime(0) DEFAULT NULL COMMENT '登记时间',
  `password` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  PRIMARY KEY (`number`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '读者信息表' ROW_FORMAT = Compact;

-- ----------------------------
-- Table structure for still
-- ----------------------------
DROP TABLE IF EXISTS `still`;
CREATE TABLE `still`  (
  `rnumber` char(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '读者编号',
  `bnumber` int(11) NOT NULL COMMENT '图书编号',
  `quantity` int(11) DEFAULT 1 COMMENT '数量',
  `stime` datetime(0) DEFAULT NULL COMMENT '还书时间'
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '还书信息表' ROW_FORMAT = Compact;

-- ----------------------------
-- View structure for view_aa
-- ----------------------------
DROP VIEW IF EXISTS `view_aa`;
CREATE ALGORITHM = UNDEFINED DEFINER = `root`@`localhost` SQL SECURITY DEFINER VIEW `view_aa` AS select `b`.`rnumber` AS `rnumber`,`r`.`name` AS `rname`,`b`.`bnumber` AS `bnumber`,`bs`.`name` AS `bname`,`b`.`btime` AS `bstime` from ((`borrow` `b` join `books` `bs`) join `reader` `r`) where ((`b`.`rnumber` = `r`.`number`) and (`b`.`bnumber` = `bs`.`number`));

-- ----------------------------
-- Procedure structure for Bookreturn
-- ----------------------------
DROP PROCEDURE IF EXISTS `Bookreturn`;
delimiter ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `Bookreturn`(in Borrowid char(20),in bookid int ,quant int)
begin
    declare cone int default 0;
    set cone =(select quantity from borrow
    where rnumber =Borrowid and bnumber=bookid and quantity>0
    ORDER BY btime limit 1)-quant;
    
    -- 向还书表插入信息
    INSERT INTO still(rnumber,bnumber,quantity,stime)
    VALUES(Borrowid,bookid,quant,now());
    -- 图书表数量+还书的数量
    update books set extant=extant+quant
    where number=bookid ;
    -- 还书后减去对应的数量
    update borrow set quantity=quantity-quant
    where rnumber =Borrowid and bnumber=bookid
    ORDER BY btime limit 1;    
    -- while循环,如果借书表数值为负数,则循环减去正数的数值
    WHILE cone<0 DO
        set cone=cone+1;
        update borrow set quantity =quantity-1
        where quantity>0 and rnumber =Borrowid and bnumber=bookid
        ORDER BY btime limit 1;
        update borrow set quantity=quantity+1
        WHERE quantity<0 and rnumber =Borrowid and bnumber=bookid
        ORDER BY btime limit 1;
    END WHILE;
    -- 把等于0的数值删除
    delete from borrow 
    where quantity=0;    
end
;;
delimiter ;

-- ----------------------------
-- Procedure structure for Borrowbooks
-- ----------------------------
DROP PROCEDURE IF EXISTS `Borrowbooks`;
delimiter ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `Borrowbooks`(Borrowid char(20),bookid int ,quant int)
begin
    INSERT INTO borrow(rnumber,bnumber,quantity,btime)
    VALUES(Borrowid,bookid,quant,now());
--     update borrow set quantity=quantity+quant WHERE Borrowid=rnumber and bookid=bnumber;
    update books set extant=extant-quant
    where number=bookid;
end
;;
delimiter ;

-- ----------------------------
-- Procedure structure for Insertbooks
-- ----------------------------
DROP PROCEDURE IF EXISTS `Insertbooks`;
delimiter ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `Insertbooks`(b varchar(40),c int ,d varchar(35),e varchar(40),f date,h int)
begin
    INSERT INTO books (number,`name`,category,author,press,pdate,wdate,books) 
    VALUES (null,b,c,d,e,f,now(),h) ON DUPLICATE KEY UPDATE books=books+h;
    update books set extant = extant+h where `name`= b;
end
;;
delimiter ;

-- ----------------------------
-- Procedure structure for proc_2
-- ----------------------------
DROP PROCEDURE IF EXISTS `proc_2`;
delimiter ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_2`()
BEGIN
             drop view if exists view_aa;
             create view view_aa as
             select b.rnumber,r.`name` rname,b.bnumber,bs.`name` bname,b.btime as bstime from borrow b,books bs,reader  r
             where b.rnumber=r.number and b.bnumber=bs.number;

             insert into amerce(rnumber,rname,bnumber,bname,money,bstime)         
             select rnumber,rname,bnumber,bname,count(*) as money,bstime from view_aa;
    end
;;
delimiter ;

-- ----------------------------
-- Procedure structure for repayment
-- ----------------------------
DROP PROCEDURE IF EXISTS `repayment`;
delimiter ;;
CREATE DEFINER=`root`@`%` PROCEDURE `repayment`(rnum char(20),bnum int ,quant int)
begin        
    declare cone int default 0;
        -- 减去对应的数量
    update amerce set quantity=quantity-quant
    where rnumber = rnum and bnumber = bnum
    ORDER BY bstime limit 1;
    -- 把负数赋值给cone
    select quantity into cone from amerce where quantity<0;    
    -- while循环,如果cone为负数,则循环减去正数的数值
    WHILE cone<0 DO
        set cone=cone+1;

        -- 钱数 money-(money/quantity)
         update amerce set money=money-(money/quantity)
        where quantity>0 and rnumber = rnum and bnumber = bnum
        ORDER BY bstime limit 1;
        -- 正数 -1
        update amerce set quantity =quantity-1
        where quantity>0 and rnumber = rnum and bnumber = bnum
        ORDER BY bstime limit 1;
        -- 负数 +1
        update amerce set quantity=quantity+1
        WHERE quantity<0 and rnumber = rnum and bnumber = bnum
        ORDER BY bstime limit 1;
    END WHILE;
    -- 把等于0的数值删除
    delete from amerce where quantity=0;
end
;;
delimiter ;

-- ----------------------------
-- Procedure structure for updateMyTest
-- ----------------------------
DROP PROCEDURE IF EXISTS `updateMyTest`;
delimiter ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `updateMyTest`(quant int)
BEGIN 
    declare cone int default 0;
    set cone =(select quantity from borrow
    where quantity>0
    ORDER BY btime limit 1)-quant;
    SELECT * from borrow where quantity=cone;
    
--     WHILE cone<0 DO
--         set cone=cone+1;
--         update borrow set quantity =quantity-1
--         where quantity>0
--         ORDER BY btime limit 1;
--         update borrow set quantity=quantity+1
--         WHERE quantity<0
--         ORDER BY btime limit 1;
--     END WHILE;
    
end
;;
delimiter ;

-- ----------------------------
-- Triggers structure for table still
-- ----------------------------
DROP TRIGGER IF EXISTS `trigger_still_amerce`;
delimiter ;;
CREATE DEFINER = `root`@`localhost` TRIGGER `trigger_still_amerce` BEFORE INSERT ON `still` FOR EACH ROW -- 行级触发器
BEGIN
        replace into amerce(rnumber,rname,bnumber,bname,quantity,bstime,money)    
        select borrow.rnumber rnumber,reader.name rname,
        borrow.bnumber bnumber,books.name bname,
        borrow.quantity quantity,reader.rdate bstime,
        0.1*datediff(now(),borrow.btime)-30 money
        from borrow,reader,books
        where borrow.rnumber=reader.number and borrow.bnumber=books.number
        and datediff(now(),borrow.btime)>=30
        and books.number=borrow.bnumber;    
END
;;
delimiter ;

SET FOREIGN_KEY_CHECKS = 1;

2.设计好将要使用的sql语句

视图、存储过程和触发器,在上面创建数据库的时候建好了,下面是一下视图、存储过程和触发器的创建语句。

-- 1、添加图书表书籍 -- 完成
CREATE UNIQUE index books_name on books(name);

delimiter //
create procedure Insertbooks(b varchar(40),c int ,d varchar(35),e varchar(40),f date,h int)
begin
    INSERT INTO books (number,`name`,category,author,press,pdate,wdate,books) 
    VALUES (null,b,c,d,e,f,now(),h) ON DUPLICATE KEY UPDATE books=books+h;
    update books set extant = extant+h where `name`= b;
end; //
delimiter ;

call Insertbooks('白鹿原','1','张三','人民出版社','2022-1-9','7');

-- 2、添加图书类别信息 -- 完成
INSERT INTO category()
VALUES(1,'话剧');

-- 3、添加读者信息 -- 完成
INSERT INTO reader(number,name,sex,kind,rdate)
VALUES('20215101020051','翠花','女','学生',now());

-- 4、读者借书 -- 完成
delimiter //
create procedure Borrowbooks(Borrowid char(20),bookid int ,quant int)
begin
    INSERT INTO borrow(rnumber,bnumber,quantity,btime)
    VALUES(Borrowid,bookid,quant,now());
--     update borrow set quantity=quantity+quant WHERE Borrowid=rnumber and bookid=bnumber;
    update books set extant=extant-quant
    where number=bookid;
end ; //
delimiter ;

Call Borrowbooks('20215101020051','203','50');

-- 5、读者还书 -- 完成
delimiter //
create procedure Bookreturn(in Borrowid char(20),in bookid int ,quant int)
begin
    declare cone int default 0;
    set cone =(select quantity from borrow
    where rnumber =Borrowid and bnumber=bookid and quantity>0
    ORDER BY btime limit 1)-quant;    
    -- 向还书表插入信息
    INSERT INTO still(rnumber,bnumber,quantity,stime)
    VALUES(Borrowid,bookid,quant,now());
    -- 图书表数量+还书的数量
    update books set extant=extant+quant
    where number=bookid ;
    -- 还书后减去对应的数量
    update borrow set quantity=quantity-quant
    where rnumber =Borrowid and bnumber=bookid
    ORDER BY btime limit 1;    
    -- while循环,如果借书表数值为负数,则循环减去正数的数值
    WHILE cone<0 DO
        set cone=cone+1;
        update borrow set quantity =quantity-1
        where quantity>0 and rnumber =Borrowid and bnumber=bookid
        ORDER BY btime limit 1;
        update borrow set quantity=quantity+1
        WHERE quantity<0 and rnumber =Borrowid and bnumber=bookid
        ORDER BY btime limit 1;
    END WHILE;
    -- 把等于0的数值删除
    delete from borrow 
    where quantity=0;    
end ; //
delimiter ;

Call Bookreturn('20215101020051','203','5');
drop procedure Borrowbooks;
drop TRIGGER trigger_still_amerce;

-- 6、读者还书时超过30天罚款 -- 完成
-- 设置还书的时候触发,往罚款表插入数据
delimiter //
CREATE TRIGGER trigger_still_amerce
BEFORE INSERT ON still FOR  EACH  ROW   -- 行级触发器
BEGIN
        replace into amerce(rnumber,rname,bnumber,bname,quantity,bstime,money)    
        select borrow.rnumber rnumber,reader.name rname,
        borrow.bnumber bnumber,books.name bname,
        borrow.quantity quantity,reader.rdate bstime,
        0.1*datediff(now(),borrow.btime)-30 money
        from borrow,reader,books
        where borrow.rnumber=reader.number and borrow.bnumber=books.number
        and datediff(now(),borrow.btime)>=30
        and books.number=borrow.bnumber;    
END; //
delimiter ;
show TRIGGERS;


-- 7、图书废弃 -- 完成
update books set books=books-1,extant=extant-1 where number='202';
-- 8、图书下架 -- 完成
delete from books where number='202';

3.创建项目

在IEDA中新建一个空项目 library

创建软件包 Module

创建三个类, JavaOK、JavaTest、JDBCUtils 。JavaOK=>运行语句 , JavaTest=> 存放方法 , JOBCUtils =>存放方法

4.导入mysql包(必要)

下载包:mysql网站:MySQL :: Download Connector/J

下拉选择Platform Independent

下载mysql-connector-j-8.0.32.tar.gz

点击Download下载

点击No thanks, just start my download.//不登陆下载

解压后就可以看到mysql-connector-j-8.0.32.jar,只有3m大小

或者可以在阿里云盘下载

Java连接数据库实现图书馆...系统(详细教程)https://www.aliyundrive.com/s/UTz8pNxobGK


在IEDA中导入刚刚下载的包:

文件-项目结构-模块-点击加号-1.JAR或目录-上传刚刚下载的jar包

导包工作完成,接下来可以正式编写代码了

5.测试连接数据库

先来一个简单的测试,看是否能成功连接

package com.moyida.linkage;
import java.sql.Connection;
import java.sql.DriverManager;

public class test {
    public static void main(String[] args) {
        Connection con;
// 
        String url = "jdbc:mysql://localhost:3306/library";
        String user = "root";
        String password = "root";
        try {
            //连接数据库,获得连接对象
            con = DriverManager.getConnection(url, user, password);
            if (!con.isClosed())
                System.out.println("成功连接数据库");
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("连接失败");
        }
    }
}

运行栏显示”成功连接数据库“则表示连接成功了

如果显示”连接失败“,则没有连接成功,检查上述的步骤是否遗漏

测试完后可以将代码删除

6.JOBCUtili 页面

里边存入释放资源的方法

 //释放资源
    public static void close(Connection connection, Statement statement, ResultSet resultSet) {
        try {
            if (resultSet != null) {
                resultSet.close();
                resultSet = null;
            }
            if (statement != null) {
                statement.close();
                statement = null;
            }
            if (connection != null) {
                connection.close();
                connection = null;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }

7.JavaTest 页面

这里先写好数据库连接方法,修改的时候数据库的时候只要修改一处就好了

ip地址修改成自己的

    static final String DB_URL = "jdbc:mysql://localhost:3306/library";
    static final String USER = "root"; //账号
    static final String PASS = "root"; //密码

这里为了省事儿,我把JavaTest页面的所有代码都放到这里

把IP地址和账号密码给成自己的就可以用了,根据方法可以看出连接数据库和执行sql语句的原理,用上面的main方法可以测试这些方法的可行性。

package com.moyida.linkage;
import java.lang.constant.Constable;
import java.sql.*;
public class JavaTest {
    public static void main(String[] args) {
        //查询用户信息
//        query_data("20215154515454", "456");
        //查询登录信息
//        System.out.println(UserType("20215154515454", "456"));
        //插入书籍到图书信息表
//        System.out.println("书名,类别,作者,出版社,出版日期,数量");
//        AddBooks("高原", "1", "小儿", "中华出版社", "2022-1-9", "5");
        //添加类别
//        AddCategories(5, "神话类");
        //3、添加读者信息
//        AddReaders("20544545446546", "劳务", "女", "2", "1112222");
        //4、读者借书
//        Call Borrowbooks('20215101020051','203','3');
//        BorrowBooks("20215101020051","203","3");
        //5、读者还书
//        AlsoBook("20215101020051","203","2");
        //-- 7、图书废弃
        //update books set books=books-1,extant=extant-1 where number='202';
//        BooksAbandoned("203");
        //-- 8、图书下架
        //delete from books where number='202';
//        Undercarriage("203");
        //查询图书信息
//        System.out.println(BookInformation("205"));
//        AllBookInformation();
        //欠费查询
//        System.out.println(ArrearageTable("20215101020051", "203"));
        //删除罚款账单
//        repayment("20215154515454","210");
        //查询读者信息表有无该账号
//        System.out.println(ReaderTable("2021510102005"));
         // 打印读者信息
//        PrintReader("20215101024620");
    }

    static final String DB_URL = "jdbc:mysql://localhost:3306/library";
    static final String USER = "root";
    static final String PASS = "root";

    /**
     * 图书下架
     *
     * @param number
     * @return
     */
    public static boolean Undercarriage(String number) {
        Connection conn = null;
        Statement stmt = null;
        try {
            //连接数据库,获得连接对象
            conn = DriverManager.getConnection(DB_URL, USER, PASS);
            //创建执行环境
            stmt = conn.createStatement();
            //执行sql语句,得到结果集 resultSet
            String sql = "delete from books where number='" + number + "'";
            System.out.println(sql);
            int resultSet = stmt.executeUpdate(sql);
        } catch (Exception e) {
            e.printStackTrace();
        }//释放资源
        finally {
            JDBCUtils.close(conn, stmt, null);
        }
        return false;
    }

    /**
     * 图书废弃
     *
     * @param number
     * @return
     */
    public static String BooksAbandoned(String number) {
        Connection connection = null;
        Statement statement = null;
        try {
            //连接数据库,获得连接对象
            connection = DriverManager.getConnection(DB_URL, USER, PASS);
            //创建执行环境
            statement = connection.createStatement();
            //执行sql语句,得到结果集 resultSet
            String sql = "update books set books=books-1,extant=extant-1 where number='" + number + "'";
            int resultSet = statement.executeUpdate(sql);
        } catch (Exception e) {
            e.printStackTrace();
        }//释放资源
        finally {
            JDBCUtils.close(connection, statement, null);
        }
        return number;
    }


    /**
     * 读者还书
     *
     * @param rnumber  读者编号
     * @param bnumber  图书编号
     * @param quantity 数量
     */
    static void AlsoBook(String rnumber, String bnumber, String quantity) {
        Connection connection = null;
        Statement statement = null;
        try {
            //连接数据库,获得连接对象
            connection = DriverManager.getConnection(DB_URL, USER, PASS);
            //创建执行环境
            statement = connection.createStatement();
            //执行sql语句,得到结果集 resultSet
            String sql = "Call Bookreturn(" + "'" + rnumber + "'" + "," + "'" + bnumber + "'" + "," + "'" + quantity + "'" + ")";
            System.out.println(sql);
            int resultSet = statement.executeUpdate(sql);
        } catch (Exception e) {
            e.printStackTrace();
        }//释放资源
        finally {
            JDBCUtils.close(connection, statement, null);
        }
    }


    /**
     * 欠费罚款查询
     *
     * @param rnumber
     * @param bnumber
     * @return
     */
    public static String ArrearageTable(String rnumber, String bnumber) {
        Connection connection = null;
        Statement statement = null;
        try {
            //连接数据库,获得连接对象
            connection = DriverManager.getConnection(DB_URL, USER, PASS);
            //创建执行环境
            statement = connection.createStatement();
            //执行sql语句,得到结果集 resultSet
            String sql = "SELECT sum(money) as arrearage FROM amerce  WHERE rnumber =" + rnumber + " and bnumber= " + bnumber + " ORDER BY quantity";
            ResultSet resultSet = statement.executeQuery(sql);
            while (resultSet.next()) {
                String a = resultSet.getString("arrearage");
                return a;
            }
            // 完成后关闭
            resultSet.close();
            statement.close();
            connection.close();
        } catch (SQLException se) {
            // 处理 JDBC 错误
            se.printStackTrace();
        } catch (Exception e) {
            // 处理 Class.forName 错误
            e.printStackTrace();
        } finally {
            // 关闭资源
            try {
                if (statement != null) statement.close();
            } catch (SQLException se2) {
            }// 什么都不做
            try {
                if (connection != null) connection.close();
            } catch (SQLException se) {
                se.printStackTrace();
            }
        }
        return null;
    }

    /**
     * 通过学号打印借书信息表
     *
     * @param rnumber 读者编号
     */
    public static void NumberBookTable(String rnumber) {
        Connection conn = null;
        Statement stmt = null;
        try {
            //连接数据库,获得连接对象
            conn = DriverManager.getConnection(DB_URL, USER, PASS);

            //创建执行环境
            stmt = conn.createStatement();
            String sql = "SELECT * FROM borrow WHERE rnumber =" + rnumber;
            ResultSet rs = stmt.executeQuery(sql);
            while (rs.next()) {
                System.out.print(rs.getString("rnumber"));
                System.out.print("\t ,");
                System.out.print(rs.getString("bnumber"));
                System.out.print("\t ,");
                System.out.print(rs.getString("quantity"));
                System.out.print("\t ,");
                System.out.println(rs.getString("btime"));
            }
            // 完成后关闭
            rs.close();
            stmt.close();
            conn.close();
        } catch (SQLException se) {
            // 处理 JDBC 错误
            se.printStackTrace();
        } catch (Exception e) {
            // 处理 Class.forName 错误
            e.printStackTrace();
        } finally {
            // 关闭资源
            try {
                if (stmt != null) stmt.close();
            } catch (SQLException se2) {
            }// 什么都不做
            try {
                if (conn != null) conn.close();
            } catch (SQLException se) {
                se.printStackTrace();
            }
        }

    }

    /**
     * 打印借书信息表
     *
     * @param rnumber 读者编号
     * @param bnumber 书籍编号
     */
    public static void BookTable(String rnumber, String bnumber) {
        Connection conn = null;
        Statement stmt = null;
        try {
            //连接数据库,获得连接对象
            conn = DriverManager.getConnection(DB_URL, USER, PASS);

            //创建执行环境
            stmt = conn.createStatement();
            String sql = "SELECT * FROM borrow WHERE rnumber =" + rnumber + " and bnumber= " + bnumber;
            ResultSet rs = stmt.executeQuery(sql);
            while (rs.next()) {
                System.out.print(rs.getString("rnumber"));
                System.out.print("\t ,");
                System.out.print(rs.getString("bnumber"));
                System.out.print("\t ,");
                System.out.print(rs.getString("quantity"));
                System.out.print("\t ,");
                System.out.println(rs.getString("btime"));
            }
            // 完成后关闭
            rs.close();
            stmt.close();
            conn.close();
        } catch (SQLException se) {
            // 处理 JDBC 错误
            se.printStackTrace();
        } catch (Exception e) {
            // 处理 Class.forName 错误
            e.printStackTrace();
        } finally {
            // 关闭资源
            try {
                if (stmt != null) stmt.close();
            } catch (SQLException se2) {
            }// 什么都不做
            try {
                if (conn != null) conn.close();
            } catch (SQLException se) {
                se.printStackTrace();
            }
        }
    }


    /**
     * 删除罚款账单
     *
     * @param rnumber
     * @param bnumber
     */
    //delete amerce WHERE rnumber='20215154515454' and bnumber='210'
    public static void repayment(String rnumber, String bnumber) {
        Connection connection = null;
        Statement statement = null;
        try {
            //连接数据库,获得连接对象
            connection = DriverManager.getConnection(DB_URL, USER, PASS);
            //创建执行环境
            statement = connection.createStatement();
            //执行sql语句,得到结果集 resultSet
            String sql = "delete from amerce WHERE rnumber=" + rnumber + " and bnumber=" + bnumber;
            int resultSet = statement.executeUpdate(sql);
        } catch (Exception e) {
            e.printStackTrace();
        }//释放资源
        finally {
            JDBCUtils.close(connection, statement, null);
        }

    }

    /**
     * 读者借书
     *
     * @param rnumber 读者编号
     */
    public static void BorrowBooks(String rnumber, String bnumber, String quantity) {
        Connection connection = null;
        Statement statement = null;
        try {
            //连接数据库,获得连接对象
            connection = DriverManager.getConnection(DB_URL, USER, PASS);
            //创建执行环境
            statement = connection.createStatement();
            //执行sql语句,得到结果集 resultSet
            String sql = "Call Borrowbooks(" + "'" + rnumber + "'" + "," + "'" + bnumber + "'" + "," + "'" + quantity + "'" + ")";
            System.out.println(sql);
            int resultSet = statement.executeUpdate(sql);
        } catch (Exception e) {
            e.printStackTrace();
        }//释放资源
        finally {
            JDBCUtils.close(connection, statement, null);
        }

    }

    /**
     * 添加读者信息(注册)
     *
     * @param number
     * @param name
     * @param sex
     * @param kind
     * @param password
     */
    public static void AddReaders(String number, String name, String sex, String kind, String password) {
        Connection connection = null;
        Statement statement = null;
        try {
            //连接数据库,获得连接对象
            connection = DriverManager.getConnection(DB_URL, USER, PASS);
            //创建执行环境
            statement = connection.createStatement();
            //执行sql语句,得到结果集 resultSet
            //      // INSERT INTO reader(number,name,sex,kind,rdate) VALUES('20215101020051','翠花','女','学生',now(),password);
            String sql = "INSERT INTO reader VALUES(" + "'" + number + "'" + "," + "'" + name + "'" + "," + "'" + sex + "'" + "," + "'" + kind + "'" + "," + "now()" + "," + "'" + password + "'" + ")";
            int resultSet = statement.executeUpdate(sql);
        } catch (Exception e) {
            e.printStackTrace();
        }//释放资源
        finally {
            JDBCUtils.close(connection, statement, null);
        }
    }

    /**
     * 2、添加图书类别信息
     *
     * @param id
     * @param name
     * @return
     */
    public static String AddCategories(int id, String name) {
        Connection connection = null;
        Statement statement = null;
        ResultSet resultSet = null;
        try {
            //连接数据库,获得连接对象
            connection = DriverManager.getConnection(DB_URL, USER, PASS);
            //创建执行环境
            statement = connection.createStatement();
            //执行sql语句,得到结果集 resultSet
            String sql = "INSERT INTO category() VALUES(" + id + "," + "'" + name + "'" + ")";
            resultSet = statement.executeQuery(sql);
//            int resultSet = statement.executeUpdate(sql);
            // 完成后关闭
            resultSet.close();
            statement.close();
            connection.close();
        } catch (Exception e) {
            e.printStackTrace();
        }//释放资源
        finally {
            JDBCUtils.close(connection, statement, resultSet);
        }
        return name;
    }

    /**
     * 添加书籍到图书信息表
     *
     * @param name     图书名称
     * @param category 图书类别
     * @param author   作者
     * @param press    出版社
     * @param pdate    出版日期
     * @param quantity 要存的数量
     * @return
     */
    public static String AddBooks(String name, String category, String author, String press, String pdate, String quantity) {
        Connection connection = null;
        ResultSet resultSet = null;
        Statement statement = null;
        try {
            //连接数据库,获得连接对象
            connection = DriverManager.getConnection(DB_URL, USER, PASS);
            //创建执行环境
            statement = connection.createStatement();
            //执行sql语句,得到结果集 resultSet
            String sql = "call Insertbooks(" + "'" + name + "'" + "," + "'" + category + "'" + "," + "'" + author + "'" + "," + "'" + press + "'" + "," + "'" + pdate + "'" + "," + "'" + quantity + "'" + ")";
            resultSet = statement.executeQuery(sql);
            // 完成后关闭
            resultSet.close();
            statement.close();
            connection.close();
        } catch (Exception e) {
            //错误处理
            e.printStackTrace();
        }//释放资源
        finally {
            JDBCUtils.close(connection, statement, resultSet);
        }

        return name;
    }

    /**
     * 查询所有图书信息
     *
     * @return 返回值
     */
    public static void AllBookInformation() {
        Connection conn = null;
        Statement stmt = null;
        try {
            //连接数据库,获得连接对象
            conn = DriverManager.getConnection(DB_URL, USER, PASS);
            //创建执行环境
            stmt = conn.createStatement();

            String sql = "SELECT * FROM books";
            ResultSet rs = stmt.executeQuery(sql);
            System.out.println("图书编号  图书名称 图书类别 作者 出版社 出版日期 入库日期 库存总数量 现存数量");
            while (rs.next()) {
                System.out.print(rs.getString("number") + "\t");
                System.out.print(rs.getString("name") + "\t");
                System.out.print(rs.getString("category") + "\t");
                System.out.print(rs.getString("author") + "\t");
                System.out.print(rs.getString("press") + "\t");
                System.out.print(rs.getString("pdate") + "\t");
                System.out.print(rs.getString("wdate") + "\t");
                System.out.print(rs.getString("books") + "\t");
                System.out.println(rs.getString("extant"));
            }
            // 完成后关闭
            rs.close();
            stmt.close();
            conn.close();
        } catch (SQLException se) {
            // 处理 JDBC 错误
            se.printStackTrace();
        } catch (Exception e) {
            // 处理 Class.forName 错误
            e.printStackTrace();
        } finally {
            // 关闭资源
            try {
                if (stmt != null) stmt.close();
            } catch (SQLException se2) {
            }// 什么都不做
            try {
                if (conn != null) conn.close();
            } catch (SQLException se) {
                se.printStackTrace();
            }
        }
    }
    /**
     * 打印读者信息
     */
    public static void PrintReader(String number){
        Connection conn = null;
        Statement stmt = null;
        try {
            //连接数据库,获得连接对象
            conn = DriverManager.getConnection(DB_URL, USER, PASS);
            //创建执行环境
            stmt = conn.createStatement();
            String sql = "SELECT * FROM reader WHERE number =" + number;
            ResultSet rs = stmt.executeQuery(sql);
            while (rs.next()) {
                System.out.print(rs.getString("number")+"\t");
                System.out.print(rs.getString("name")+"\t");
                System.out.print(rs.getString("sex")+"\t");
                System.out.print(rs.getString("kind")+"\t");
                System.out.print(rs.getString("rdate")+"\t");
                System.out.println(rs.getString("password"));
            }
            // 完成后关闭
            rs.close();
            stmt.close();
            conn.close();
        } catch (SQLException se) {
            // 处理 JDBC 错误
            se.printStackTrace();
        } catch (Exception e) {
            // 处理 Class.forName 错误
            e.printStackTrace();
        } finally {
            // 关闭资源
            try {
                if (stmt != null) stmt.close();
            } catch (SQLException se2) {
            }// 什么都不做
            try {
                if (conn != null) conn.close();
            } catch (SQLException se) {
                se.printStackTrace();
            }
        }

    }

    /**
     * 查询读者信息表有无该账号
     *
     * @return
     */
    public static Constable ReaderTable(String number) {
        Connection conn = null;
        Statement stmt = null;
        try {
            //连接数据库,获得连接对象
            conn = DriverManager.getConnection(DB_URL, USER, PASS);
            //创建执行环境
            stmt = conn.createStatement();
            String sql = "select number from reader where number=" + number;
            ResultSet rs = stmt.executeQuery(sql);
            if (rs.next()) {
                return false;
            }
            // 完成后关闭
            rs.close();
            stmt.close();
            conn.close();
        } catch (SQLException se) {
            // 处理 JDBC 错误
            se.printStackTrace();
        } catch (Exception e) {
            // 处理 Class.forName 错误
            e.printStackTrace();
        } finally {
            // 关闭资源
            try {
                if (stmt != null) stmt.close();
            } catch (SQLException se2) {
            }// 什么都不做
            try {
                if (conn != null) conn.close();
            } catch (SQLException se) {
                se.printStackTrace();
            }
        }
        return null;
    }

    /**
     * 查询图书信息
     *
     * @param number 输入的密码
     * @return 返回值
     */
    public static String BookInformation(String number) {
        Connection conn = null;
        Statement stmt = null;
        try {
            //连接数据库,获得连接对象
            conn = DriverManager.getConnection(DB_URL, USER, PASS);
            //创建执行环境
            stmt = conn.createStatement();
            String sql = "SELECT * FROM books WHERE number =" + number;
            ResultSet rs = stmt.executeQuery(sql);
            while (rs.next()) {
                String a = rs.getString("number");
                String a1 = ("\t");
                String b = rs.getString("name");
                String b1 = ("\t");
                String c = rs.getString("category");
                String c1 = ("\t");
                String d = rs.getString("author");
                String d1 = ("\t");
                String e = rs.getString("press");
                String e1 = ("\t");
                String f = rs.getString("pdate");
                String f1 = ("\t");
                String g = rs.getString("wdate");
                String g1 = ("\t");
                String h = rs.getString("books");
                String h1 = ("\t");
                String i = rs.getString("extant");
                return a + a1 + b + b1 + c + c1 + d + d1 + e + e1 + f + f1 + g + g1 + h + h1 + i;
            }
            // 完成后关闭
            rs.close();
            stmt.close();
            conn.close();
        } catch (SQLException se) {
            // 处理 JDBC 错误
            se.printStackTrace();
        } catch (Exception e) {
            // 处理 Class.forName 错误
            e.printStackTrace();
        } finally {
            // 关闭资源
            try {
                if (stmt != null) stmt.close();
            } catch (SQLException se2) {
            }// 什么都不做
            try {
                if (conn != null) conn.close();
            } catch (SQLException se) {
                se.printStackTrace();
            }
        }
        return null;
    }

    /**
     * 查询学生表信息
     *
     * @param number   输入的账号
     * @param password 输入的密码
     * @return 返回值
     */
    public static void query_data(String number, String password) {
        Connection conn = null;
        Statement stmt = null;
        try {
            //连接数据库,获得连接对象
            conn = DriverManager.getConnection(DB_URL, USER, PASS);

            //创建执行环境
            stmt = conn.createStatement();
            String sql = "select * from reader where number= " + "'" + number + "'" + " and password=" + "'" + password + "'";
            ResultSet rs = stmt.executeQuery(sql);
            while (rs.next()) {
                String a = rs.getString("number");
                String a1 = ("\t");
                String b = rs.getString("name");
                String b1 = ("\t");
                String c = rs.getString("sex");
                String c1 = ("\t");
                String d = rs.getString("kind");
                String d1 = ("\t");
                String e = rs.getString("rdate");
                String e1 = ("\t");
                String f = rs.getString("password");
                System.out.println(a + a1 + b + b1 + c + c1 + d + e + d1 + f);
            }
            // 完成后关闭
            rs.close();
            stmt.close();
            conn.close();
        } catch (SQLException se) {
            // 处理 JDBC 错误
            se.printStackTrace();
        } catch (Exception e) {
            // 处理 Class.forName 错误
            e.printStackTrace();
        } finally {
            // 关闭资源
            try {
                if (stmt != null) stmt.close();
            } catch (SQLException se2) {
            }// 什么都不做
            try {
                if (conn != null) conn.close();
            } catch (SQLException se) {
                se.printStackTrace();
            }
        }
    }

    /**
     * 判断用户类型,登录账号,返回1表示老师,返回2表示学生,返回null表示查无此人
     *
     * @param number 输入的学号
     * @return 返回值
     */
    public static String UserType(String number, String password) {
        Connection connection = null;
        Statement statement = null;
        try {
            //连接数据库,获得连接对象
            connection = DriverManager.getConnection(DB_URL, USER, PASS);
            //创建执行环境
            statement = connection.createStatement();
            //执行sql语句,得到结果集 resultSet
            String sql = "select kind from reader where number= " + "'" + number + "'" + " and password=" + "'" + password + "'";
            ResultSet resultSet = statement.executeQuery(sql);
            while (resultSet.next()) {
                String a = resultSet.getString("kind");
                return a;
            }
            // 完成后关闭
            resultSet.close();
            statement.close();
            connection.close();
        } catch (SQLException se) {
            // 处理 JDBC 错误
            se.printStackTrace();
        } catch (Exception e) {
            // 处理 Class.forName 错误
            e.printStackTrace();
        } finally {
            // 关闭资源
            try {
                if (statement != null) statement.close();
            } catch (SQLException se2) {
            }// 什么都不做
            try {
                if (connection != null) connection.close();
            } catch (SQLException se) {
                se.printStackTrace();
            }
        }
        return null;//这样可以使得调用方无需检查结果是否为null
    }
}

8.JavaOK 页面

JavaOK是运行调用JavaTest和JOBCUtili方法的主页面,在这个类运行可以实现系统的管理,这个系统仍有不少的bug没修复,但是可以正常跑起来了,可以根据自己的理解,把代码经行完善和修复

下面是JavaOK页面的代码

package com.moyida.linkage;
import java.lang.constant.Constable;
import java.util.Scanner;

public class JavaOk {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.println("=============首页==============");
            System.out.println("1、登录");
            System.out.println("2、注册");
            int reg = sc.nextInt();
            switch (reg) {
                case 1:
                    //登录
                    while (true) {
                        System.out.println("=============登陆页面==============");
                        System.out.println("请您输入账号");
                        String acc = sc.next();
                        System.out.println("请您输入密码");
                        String pass = sc.next();
                        String sum = JavaTest.UserType(acc, pass);
                        if (sum == null) {
                            System.out.println("对不起,查无此人,请重新输入");
                            break;
                        }
//                        int a = Integer.parseInt(sum);
//                        String a=sum;
                        //判断用户类型,登录账号,返回1表示老师,返回2表示学生,返回null表示查无此人
                        System.out.println("返回的数据是" + sum);
                        switch (sum) {
                            case "1":
                                System.out.println("欢迎管理员登录");
                                conservator(sc);
                                break;
                            case "2":
                                System.out.println("欢迎学生登录");
                                operate(sc, acc);
                                break;
                            default:
                                System.out.println("对不起,查无此人");
                                break;
                        }
                        break;
                    }
                case 2:
                    //注册
                    Register(sc);
                    break;
                default:
                    System.out.println("您输入的命令错误,请重新输入!");
                    break;
            }
        }
    }

    /**
     * 注册
     *
     * @param sc
     */
    private static void Register(Scanner sc) {
        System.out.println("=============注册页面==============");
        System.out.println("请输入要注册的账号(学号)");
        String number = sc.next();
        //查询数据库中有无该账号
        Constable aaa = JavaTest.ReaderTable(number);
        if (aaa == null) {
            //没有账号,可以进行
            System.out.println("请输入您的名字");
            String name = sc.next();
            System.out.println("请输入您的性别");
            String sex = sc.next();
            System.out.println("请输入您的类型  学生 2/管理员 1");
            int kind = sc.nextInt();
            System.out.println("请输入您的登录密码:");
            String pass = sc.next();
            //调用注册方法
            JavaTest.AddReaders(number, name, sex, String.valueOf(kind), pass);
            System.out.println("注册成功!");
            //打印注册信息
            System.out.println("您的注册信息如下:");
            JavaTest.PrintReader(number);
        }else {
            System.out.println("该账号已注册!");
        }

    }

    /**
     * 管理员操作页面
     *
     * @param sc
     */
    private static void conservator(Scanner sc) {
        while (true) {
            System.out.println("=============操作页面==============");
            System.out.println("0、退出");
            System.out.println("1、添加图书表书籍");
            System.out.println("2、添加图书类别信息");
            System.out.println("3、图书废弃");
            System.out.println("4、图书下架");
            System.out.println("5、查询全部图书信息");
            int i = sc.nextInt();
            switch (i) {
                case 0:
                    System.out.println("已退出账号,欢迎再次登录!");
                    return;
                case 1:
                    System.out.println("=============添加书籍页面==============");
                    System.out.println("图书名称");
                    String name = sc.next();
                    System.out.println("图书类别");
                    String category = sc.next();
                    System.out.println("作者");
                    String author = sc.next();
                    System.out.println("出版社");
                    String press = sc.next();
                    System.out.println("出版日期");
                    String pdate = sc.next();
                    System.out.println("要存的数量");
                    String quantity = sc.next();
                    String charu = JavaTest.AddBooks(name, category, author, press, pdate, quantity);
                    System.out.println("添加成功");
                    break;
                case 2:
                    System.out.println("=============添加图书类别页面==============");
                    System.out.println("输入类别编号");
                    int leibie = sc.nextInt();
                    System.out.println("输入类别名称");
                    String name1 = sc.next();
                    JavaTest.AddCategories(leibie, name1);
                    System.out.println("添加成功");
                    break;
                case 3:
                    System.out.println("=============图书废弃页面==============");
                    System.out.println("请输入要废弃图书的图书编号");
                    String reduce = sc.next();
                    System.out.println("您要废除的书籍是:");
                    System.out.println(JavaTest.BookInformation(reduce));
                    System.out.println("是否确认废除y/n");
                    String rs = sc.next();
                    switch (rs) {
                        case "y":
                            //可以废除
                            String ff = JavaTest.BooksAbandoned(reduce);
                            System.out.println(JavaTest.BookInformation(reduce));
                            System.out.println("废弃成功,该图书减一");
                            break;
                        default:
                            System.out.println("您取消废除,当前书籍继续保留~");
                    }

                    break;
                case 4:
                    System.out.println("=============图书下架页面==============");
                    System.out.println("请输入要下架图书的图书编号");
                    String reduce1 = sc.next();
                    System.out.println("您要下架的书籍是:");
                    System.out.println(JavaTest.BookInformation(reduce1));
                    System.out.println("是否确认把该图书下架y/n");
                    String rs1 = sc.next();
                    switch (rs1) {
                        case "y":
                            //可以废除
                            String ff = JavaTest.BooksAbandoned(reduce1);
                            System.out.println(JavaTest.Undercarriage(reduce1));
                            System.out.println("下架成功,图书已从图书系统中去除");
                            break;
                        default:
                            System.out.println("您取消废除,当前书籍继续保留~");
                    }
                    break;
                case 5:
                    //查看所有书籍
                    JavaTest.AllBookInformation();
                    break;
                default:
                    System.out.println("输入错误!");
                    break;
            }
        }
    }

    /**
     * 学生操作页面
     *
     * @param sc
     */
    private static void operate(Scanner sc, String acc) {
        while (true) {
            System.out.println("=============学生操作页面==============");
            System.out.println("0、退出");
            System.out.println("1、查看所有书籍");
            System.out.println("2、借书");
            System.out.println("3、还书");
            String student = sc.next();
            switch (student) {
                case "0":
                    System.out.println("已退出账号,欢迎再次登录!");
                    return;
                case "1":
                    //查看所有书籍
                    JavaTest.AllBookInformation();
                    break;
                case "2":
                    //借书
                    //                public static boolean BorrowBooks(String rnumber, String bnumber, String quantity) {
                    System.out.println("请输入要借的书籍编号");
                    String Borrow = sc.next();
                    System.out.println("您要借的书籍是:");
                    System.out.println(JavaTest.BookInformation(Borrow));
                    System.out.println("是否借该图书?y/n");
                    String rs1 = sc.next();
                    switch (rs1) {
                        case "y":
                            //可以借书
                            System.out.println("您要借几本书?");
                            String books = sc.next();
                            JavaTest.BorrowBooks(acc, Borrow, books);
                            System.out.println("借书完成,您的借书信息如下");
                            //打印借书信息
                            JavaTest.BookTable(acc, Borrow);
                            System.out.println("");
                            break;
                        default:
                            System.out.println("您取消借书操作,欢迎再次使用!");
                    }
                    break;
                case "3":
                    //还书
                    System.out.println("您可以还的书籍如下");
                    JavaTest.NumberBookTable(acc);
                    System.out.println("");
                    System.out.println("请输入要还的书籍编号");
                    String AlsoBook = sc.next();
                    System.out.println("您要还的书籍是:");
                    //打印借书信息
                    JavaTest.BookTable(acc, AlsoBook);
                    //再次确定归还
                    System.out.println("是否还该图书?y/n");
                    String rs2 = sc.next();
                    switch (rs2) {
                        case "y":
                            //可以还书
                            System.out.println("您要还此编号的几本书?");
                            String books = sc.next();
                            // 还书
                            JavaTest.AlsoBook(acc, AlsoBook, books);
                            //查询欠费账单有没有欠费
                            String bill = JavaTest.ArrearageTable(acc, AlsoBook);
                            if (bill == null) {
                                //可以了
                                System.out.println("还书完成,您还有此类书籍尚为归还");
                                //打印借书信息
                                JavaTest.BookTable(acc, AlsoBook);
                                break;
                            } else {
                                //钱没还
                                while (true) {
                                    System.out.println("您欠费的金额是" + bill);
                                    System.out.println("如已支付,请输入内容:支付完成");
                                    String ff = sc.next();
                                    String dd = "支付完成";
                                    if (ff.equals(dd)) {
                                        //删除欠费账单
                                        JavaTest.repayment(acc, AlsoBook);
                                        //打印借书信息
                                        System.out.println("还书完成,您还有此类书籍尚为归还");
                                        //打印借书信息
                                        JavaTest.BookTable(acc, AlsoBook);
                                        break;
                                    } else {
                                        System.out.println("支付失败,请完成支付");
                                    }
                                }
                            }
                    }
            }
        }

    }
}

9.运行

在IEDA的JavaOK页面,右键点击运行,就可以使用了。

10.资料

我在阿里云盘中存有该系统程序的源代码,可提供下载学习使用。

阿里网盘 链接

Java连接数据库实现图书馆...系统(详细教程)https://www.aliyundrive.com/s/UTz8pNxobGK

你可能感兴趣的:(数据库,java,服务器)