JAVA jdbc 图书管理系统小项目

本文介绍了使用JAVA、MySQL和JDBC构建图书管理系统的步骤。主要包括需求分析、数据库设计和代码实现。系统实现了图书的增删改查以及用户信息录入功能,通过Druid连接池管理数据库连接,提供用户友好的交互菜单。
摘要由CSDN通过智能技术生成

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

本项目用了一些简单的JAVA,MySQL和JDBC知识。构建项目分为三个步骤,
分别是分析需求,设计数据库,设计代码。


提示:以下是本篇文章正文内容,下面案例可供参考

一、分析需求

(1)录入图书,录入数据格式:图书ID、书名、作者、书号、出版社、出版日期和单价:
(2)修改图书信息,删除图书信息;
(3)查询图书,可按书名、作者、书号或出版社进行图书信息查询;
(4)录入借阅用户信息,包括借阅用户ID、用户名、密码、录入时间;
需求大致是对图书进行增删改查,我可以通过MySQL数字库建立相应的表和字段,然后通过JDBC实现在项目里对数据进行操作。

我们可以提炼出以下需求:

1录入图书 2修改图书 3删除图书 4查询图书 5录入用户
其中查询图书较为特殊,需要实现任意字段查询

二、设计数据库

创建一个数据库,在数据库中分别创建books和users两个表。
(初始时是没有只有字段没有数据的)
books表有表示图书ID、书名、作者、书号、出版社、出版日期和单价的字段。
books表

users表有表示借阅用户ID、用户名、密码、录入时间的字段。
users表

两表都设置ID为主键,自动增长,唯一。

三 设计代码

设计代码有两步,
1项目的架构
2具体实现

项目架构

分为

![项目结构](https://img-blog.csdnimg.cn/a86f688d2d184f108de0b6ba54a6dbff.png在这里插入图片描述

依赖包

libs里分别是
德鲁伊连接池
mysql与Java连接的依赖包
主函数

Library实现菜单功能。通过switch实现。
图书管理类
封装有图书操作
1录入图书
2修改图书
3删除图书
4查询图书
的四个方法
用户管理类
封装有添加用户的方法
工具类

配置文件(留到具体实现时候)
代码的方式写有连接池的设置

具体实现

项目所需要实现的五个方法的核心都是JDBC,而JDBC有着一个固定流程。所以除去查询图书这个方法,它为了实现任意字段查询需要一个设置二级菜单,有些不同之外,其余方法代码很是相似。不同的点是sql语句和参数处理。

JDBC
( Java DataBase Connectivity ) Java 数据库连接

以查询为例的JDBC流程

数据库连接池是个容器,负责分配、管理数据库连接

连接池流程
1定义配置文件
2加载配置文件
3获取连接池对象
4获取数据库连接
Library

package com.it.exemple;

import com.it.exemple.BookManage;
import com.it.exemple.UserManage;

import java.util.Scanner;

public class Library {
    public static void main(String[] args) throws Exception {
        System.out.println("图书管理系统");
        while(true) {
            System.out.println("1录入图书");
            System.out.println("2修改图书");
            System.out.println("3删除图书");
            System.out.println("4查询图书");
            System.out.println("5录入用户");
            System.out.println("其他数字键退出");
            System.out.println("请输入一个数字按回车进行对应操作");
            Scanner scan = new Scanner(System.in);

            // 从键盘接收数据
            int i = 0;
            System.out.print("输入整数:");
            if (scan.hasNextInt()) {
                i = scan.nextInt();
                // 接收整数
                /*System.out.println("整数数据:" + i);
            } else {
                // 输入错误的信息
                System.out.println("输入的不是整数!");*/
                switch (i)
                {
                    case 1 :BookManage.InputBooks();break;//1录入图书
                    case 2 :BookManage.bookUpdate();break;//2修改图书
                    case 3 :BookManage.bookDrop();break;//3删除图书
                    case 4 :BookManage.bookQurry();break;//4查询图书
                    case 5 :UserManage.InputUsers();break;//5录入用户
                    default:
                        System.out.println("成功退出图书管理系统");
                        System.exit(0);
                }

            }

        }
    }

}

BookManage

package com.it.exemple;

import com.alibaba.druid.pool.DruidDataSourceFactory;
import pojo.Book;

import javax.sql.DataSource;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import java.util.Scanner;


/**
 *图书添加
 */
public  class BookManage     {

    public static void InputBooks() throws Exception {
        System.out.println("添加图书");
        System.out.println("请依次输入书名,作者,书号,出版日期,单价");
        //1用户输入数据
        Scanner scan = new Scanner(System.in);
        String bookName = scan.next();
        String author = scan.next();
        String bookNumber = scan.next();
        String publication = scan.next();
        Double unitPrice = scan.nextDouble();

        //2获取conn
        //2.1定义,加载配置文件
        Properties prop = new Properties();
        prop.load(new FileInputStream("src/druid.properties"));

        //2.2获取连接池对象
        DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
        //2.3获取数据库连接
        Connection conn = dataSource.getConnection();
        //3.定义sql语句
        String sql = "insert into books (\n" +
                "book_name,\n" +
                "author,\n" +
                "book_number,\n" +
                "publication,\n" +
                "unit_price\n" +
                ")values\n" +
                "(?,?,?,?,?);";
        //4.获取处理命令对象
        PreparedStatement pstmt = conn.prepareStatement(sql);
        //5.设置参数
        pstmt.setString(1, bookName);
        pstmt.setString(2, author);
        pstmt.setString(3, bookNumber);
        pstmt.setString(4, publication);
        pstmt.setDouble(5, unitPrice);
        //6.执行sql
        int ans = pstmt.executeUpdate();
        //7. 处理结果

        //输出集合
        if (ans > 0)
            System.out.println("添加成功");
        else System.out.println("添加失败");

        //8释放资源
        pstmt.close();
        conn.close();
    }

    /**
     * 图书更新
     */

    public static void bookUpdate() throws Exception {
        System.out.println("修改图书");
        System.out.println("请依次输入ID,书名,作者,书号,出版日期,单价");
        Scanner scan = new Scanner(System.in);
        Integer id = scan.nextInt();
        String bookName = scan.next();
        String author = scan.next();
        String bookNumber = scan.next();
        String publication = scan.next();
        double unitPrice = scan.nextDouble();
        //获取conn
        //2.1定义,加载配置文件
        Properties prop = new Properties();
        prop.load(new FileInputStream("src/druid.properties"));

        //2.2获取连接池对象
        DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
        //2.3获取数据库连接
        Connection conn = dataSource.getConnection();
        //3.定义sql语句
        String sql = "update books set book_name = ?,author = ?,book_number = ?,publication = ?,unit_price = ? where id = ?;";
        //4.获取对象
        PreparedStatement pstmt = conn.prepareStatement(sql);
        //5.设置参数
        pstmt.setString(1, bookName);
        pstmt.setString(2, author);
        pstmt.setString(3, bookNumber);
        pstmt.setString(4, publication);
        pstmt.setDouble(5, unitPrice);
        pstmt.setInt(6, id);
        //6.执行sql
        int ans = pstmt.executeUpdate();
        //7. 处理结果

        //输出集合
        if (ans > 0)
            System.out.println("修改成功");
        else System.out.println("修改失败");

        //8释放资源
        pstmt.close();
        conn.close();

    }

    /**
     * 图书删除
     *
     * @throws Exception
     */

    public static void bookDrop() throws Exception {
        System.out.println("删除图书");
        Properties prop = new Properties();
        prop.load(new FileInputStream("src/druid.properties"));
        //1导入jar包,连接池包,资源文件
        //2获取conn
        //2.1定义,加载配置文件
        Scanner scan = new Scanner(System.in);
        System.out.print("输入要删除图书的ID:");
        Integer id = scan.nextInt();

        //2.2获取连接池对象
        DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
        //2.3获取数据库连接
        Connection conn = dataSource.getConnection();
        //3.定义sql语句
        String sql = "delete  from books where id = ?;";
        //4.获取对象
        PreparedStatement pstmt = conn.prepareStatement(sql);
        //5.设置参数
        pstmt.setInt(1, id);
        //6.执行sql
        int ans = pstmt.executeUpdate();
        //7. 处理结果

        //输出集合
        if (ans > 0)
            System.out.println("删除成功");
        else System.out.println("删除失败");

        //8释放资源
        pstmt.close();
        conn.close();

    }

    /**
     * 图书查询
     *
     * @throws Exception
     */

    public static void bookQurry() throws Exception {
        //1导入jar包,连接池包,资源文件
        System.out.println("请问你要查询的依据是书名,作者,书号,出版时间,单价中的哪一个?");
        System.out.println("请输入对应的数字");
        System.out.println("1 书名");
        System.out.println("2 作者");
        System.out.println("3 书号");
        System.out.println("4 出版社");
        System.out.println("5 出版时间");
        System.out.println("6 单价");

        Scanner scan = new Scanner(System.in);
        int qft = 0;

            qft = scan.nextInt();

            System.out.println("请输入你要查询的信息");

        //2获取conn
        //2.1定义,加载配置文件
        Properties prop = new Properties();
        prop.load(new FileInputStream("src/druid.properties"));
        //2.2获取连接池对象
        DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
        //2.3获取数据库连接
        Connection conn = dataSource.getConnection();
        //3.定义sql语句

        String[] sql = {
                "select * from books where book_name = ?",
                "select * from books where author = ?",
                "select * from books where book_number = ?",
                "select * from books where press = ?",
                "select * from books where publication = ?",
                "select * from books where unit_price = ?",
        };
        //4.获取对象
        PreparedStatement pstmt = conn.prepareStatement(sql[qft - 1]);
        String str = null;
        Double dou = null;
        if ((qft - 1) < 5) {
            str = scan.next();
        } else {
            dou = scan.nextDouble();
        }
        //5.设置参数
        if ((qft - 1) < 5)
            pstmt.setString(1, str);
        else
            pstmt.setDouble(1, dou);
        //6.执行sql
        ResultSet rs = pstmt.executeQuery();
        //7. 处理结果
        Book book = null;//工具类对象
        List<Book> books = new ArrayList<>();
        while (rs.next())
        //获取数据
        {
            int id = rs.getInt("id");
            String bookName = rs.getString("book_name");
            String author = rs.getString("author");
            String bookNumber = rs.getString("book_number");
            String press = rs.getString("press");
            String publication = rs.getString("publication");
            Double unitPrice = rs.getDouble("unit_price");
            //封装Book对象
            book = new Book();
            book.setId(id);
            book.setBookName(bookName);
            book.setAuthor(author);
            book.setBookNumber(bookNumber);
            book.setPress(press);
            book.setPublication(publication);
            book.setUnitPrice(unitPrice);
            //装载集合
            books.add(book);
        }
        //输出集合
        for (int i = 0; i <= books.size() - 1; i++) {
            System.out.println(books.get(i));
        }
        //System.out.println(books);
        //8释放资源
        rs.close();
        pstmt.close();
        conn.close();
    }


}

Book实体类

直观的来看,实体类就是一个定义了属性,拥有setter、getter、无参构造方法(基本必备)、toString方法、有参方法(看需求)的一个类。
实体类可以在数据传输过程中对数据进行封装,相当于一个“工具”、“容器”、“载体”,能存储、传输数据,能管理数据,使用方法对数据进行操作。
在使用过程中,其实实体类和数据库-表是一一对应的:

数据库-表
使用实体类 一张表
一个类 一条数据、
一行数据 一个对象
一行中的一列 一个属性
… …

原文出处
https://blog.csdn.net/qq_41386332/article/details/99701010


package pojo;

public class Book {
    private int    id;
    private String bookName;
    private String author;
    private String bookNumber;
    private String publication;
    private String press;

    @Override
    public String toString() {
        return "Book{" +
                "id=" + id +
                ", bookName='" + bookName + '\'' +
                ", author='" + author + '\'' +
                ", bookNumber='" + bookNumber + '\'' +
                ", publication='" + publication + '\'' +
                ", press='" + press + '\'' +
                ", unitPrice=" + unitPrice +
                '}';
    }

    public String getPress() {
        return press;
    }

    public void setPress(String press) {
        this.press = press;
    }

    private Double unitPrice;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getBookName() {
        return bookName;
    }

    public void setBookName(String bookName) {
        this.bookName = bookName;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public String getBookNumber() {
        return bookNumber;
    }

    public void setBookNumber(String bookNumber) {
        this.bookNumber = bookNumber;
    }

    public String getPublication() {
        return publication;
    }

    public void setPublication(String publication) {
        this.publication = publication;
    }

    public Double getUnitPrice() {
        return unitPrice;
    }

    public void setUnitPrice(Double unitPrice) {
        this.unitPrice = unitPrice;
    }

};


druid.properties

driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql:///Library_management?useSSL=false&useServerPrepStmts=true&useUnicode=true&characterEncoding=UTF-8
username=root
password=123456

initialSize=5

maxActive=10

maxWait=3000





UsersManage


```java
package com.it.exemple;

import com.alibaba.druid.pool.DruidDataSourceFactory;
import org.junit.Test;

import javax.sql.DataSource;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.util.Properties;
import java.util.Scanner;

public class UserManage {
    public static  void InputUsers() throws Exception {
        System.out.println("请输入添加用户的用户名,密码,登记时间");
        Scanner scan = new Scanner(System.in);
        String userName = scan.next();
        String passage = scan.next();
        String entryDate = scan.next();

        System.out.println("添加用户");
        Properties prop = new Properties();
        prop.load(new FileInputStream("src/druid.properties"));
        //1导入jar包,连接池包,资源文件
        //2获取conn
        //2.1定义,加载配置文件



        //2.2获取连接池对象
        DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
        //2.3获取数据库连接
        Connection conn = dataSource.getConnection();
        //3.定义sql语句
        String sql = "insert into users (\n" +
                "    user_name,\n" +
                "    passage,\n" +
                "    entry_date\n" +
                ")values\n" +
                "(?,?,?);";
        //4.获取对象
        PreparedStatement pstmt = conn.prepareStatement(sql);
        //5.设置参数
        pstmt.setString(1, userName);
        pstmt.setString(2, passage);
        pstmt.setString(3, entryDate);


        //6.执行sql
        int ans = pstmt.executeUpdate();
        //7. 处理结果

        //输出集合
        if (ans > 0)
            System.out.println("添加成功");
        else System.out.println("添加失败");

        //8释放资源
        pstmt.close();
        conn.close();

    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值