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

avatar
作者
猴君
阅读量:1

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

源码下载

https://www.aliyundrive.com/s/UTz8pNxobGK

一、建立数据库

在自己的服务器或者电脑本机安装数据库系统,本次系统演示的数据库版本为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连接数据库实现图书馆...系统(详细教程)阿里云盘分享


在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连接数据库实现图书馆...系统(详细教程)阿里云盘分享

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!