假期结束,腹稿堪忧 => [ 发一个简单的图书管理程序 ] :java,jdbc,模拟start启动类

国庆假期之前的一段时间,由于实习公司没有什么事情,在公司划水给学弟学习jdbc的时候提供了一个很简单的图书管理程序,手写的含有数据库操作,觉得挺有意思,之前没有认真想过java封装的好处,一些调用的关系,我们通过方法的互调之间可以将思路理清楚,springboot的一个启动类直接就能开启内部的切入服务器,当然springboot不需要我们写那么多的配置代码,原因自然是人家内部写好了,约定大于配置可不是随口一说的。使用多了springboot让我对于spring框架也产生了厌倦。现在我们进入正题,设计的案例描述在这里:


案例描述:要求运行主类main方法后,控制台提示输入管理员账号密码登录,登陆成功后显示如下:

------------------------------------------------------------

请您输入编号进行相关书籍管理操作:

  1. 查看书籍列表
  2. 添加书籍
  3. 删除书籍

------------------------------------------------------------

当输入1之后显示全部书籍信息(书籍编号,书籍名称,书籍余量,书籍分类);

当输入2之后控制台显示如下:

------------------------------------------------------------

请您输入新书籍的名称:

------------------------------------------------------------

当输入书籍名称之后控制台显示如下:

------------------------------------------------------------

请您输入新书籍的数量:

------------------------------------------------------------

当输入书籍数量之后控制台显示如下:

------------------------------------------------------------

请您输入新书籍的分类:

------------------------------------------------------------

当输入书籍分类之后控制台显示:

------------------------------------------------------------

添加新书籍成功!输入index返回功能页面

删除目前案例可以不完成,但是可以模仿以上的逻辑设计删除书籍的操作交互,另外存储书籍信息必须采用mysql数据库,如采用List等java容器存储实现则视为案例失败。

案例技术需求:java语言基础,java JDBC。

案例提示:无。


案例描述就如此简单,相信很多学java的小伙伴会觉得很简单,但是如何优化其中的代码确是我们需要考虑的一个点,其次,代码不复用,降低耦合度也是一个点,这里我就不再说太多啦,大家看我写的一个实现,当然我写的也是有一部分问题的,但是呢,哈哈哈哈我懒啊!留给感兴趣的小伙伴修改吧!

1、首先是图书实体:

import lombok.Data;

@Data
/**
 * 配置一个Book对象接收数据查询出来的一条记录
 */
public class Book {
    private int bookId;
    private String bookName;
    private int bookAccount;
    private String bookKind;
}

2、其次是封装的jdbc操作实现类:

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class JDBC {
    private static final String url = "jdbc:mysql://localhost:3306/test";
    private static final String username = "root";
    private static final String password = "数据库用户密码";
    private static final String driver = "com.mysql.cj.jdbc.Driver";
    private static Connection connection;

    /**
     * 获取数据库连接,有开有闭记得写释放连接的方法。
     */
    public static void getConnection() {
        try {
            /*反射加载驱动*/
            Class.forName(driver);
        } catch (ClassNotFoundException e) {
            System.out.println("反射驱动类失败!");
        }
        try {
            /*利用驱动管理对象获取数据库连接*/
            connection = DriverManager.getConnection(url, username, password);
        } catch (SQLException e) {
            e.printStackTrace();
            System.out.println("获取数据库连接失败!");
        }
    }

    /**
     * 案例模拟登录
     *
     * @param phone    手机号
     * @param password 密码
     * @return 是否登录成功
     */
    public static Boolean login(String phone, String password) {
        int sign = 0;
        getConnection();
        try {
            ResultSet resultSet = connection.createStatement().
                    executeQuery("select * from test.sys_user where phoneNum =" + phone + " and password = " + password + " limit 1");
            if (resultSet.next())
                sign = 1;
            resultSet.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        shutConnection();
        return sign == 1;
    }

    /**
     * 查询全部书籍
     *
     * @return 书籍列表容器对象
     */
    public static List<Book> findAllBook() {
        /*容器初始化为16,超过16时会触发容器的扩容机制*/
        List<Book> bookList = new ArrayList<>(16);
        getConnection();
        try {
            ResultSet resultSet = connection.createStatement().executeQuery("select * from jdbctest.jdbc_book");
            while (resultSet.next()) {
                Book book = new Book();
                book.setBookId(resultSet.getInt("bookId"));
                book.setBookName(resultSet.getString("bookName"));
                book.setBookAccount(resultSet.getInt("bookAccount"));
                book.setBookKind(resultSet.getString("bookKind"));
                bookList.add(book);
            }
            resultSet.close();
            shutConnection();
            return bookList;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 增加新书籍
     *
     * @param book 书籍对象
     * @return 是否添加新书籍成功
     */
    public static Boolean addNewBook(Book book) {
        getConnection();
        try {
            int i = 0;
            PreparedStatement preparedStatement = connection.prepareStatement("insert into jdbctest.jdbc_book (BOOKNAME, BOOKACCOUNT, BOOKKIND) value (?,?,?)");
            preparedStatement.setString(1,book.getBookName());
            preparedStatement.setInt(2,book.getBookAccount());
            preparedStatement.setString(3,book.getBookKind());
            i =  preparedStatement.executeUpdate();
            shutConnection();
            return i == 1;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 删除书籍根据书籍名称
     *
     * @param bookName 书籍名称
     * @return 是否删除书籍成功
     */
    public static Boolean deleteBookByBookName(String bookName) {
        getConnection();
        try {
            PreparedStatement preparedStatement = connection.prepareStatement("delete from jdbctest.jdbc_book where bookName = ?");
            preparedStatement.setString(1,bookName);
            int i = preparedStatement.executeUpdate();
            shutConnection();
            return i == 1;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 释放数据库连接,有开有闭。
     */
    public static void shutConnection() {
        try {
            connection.close();
        } catch (SQLException e) {
            System.out.println("关闭数据库连接失败!");
        }
    }

}

3、然后是封装的一些简单的工具类:

import java.util.List;
import java.util.Scanner;

public class Util {
    /**
     * 主体功能选项页面
     */
    public static void getIndexNum() {
        for (int i = 0; i <= 10; i++)
            System.out.print("-");
        System.out.println("请输入选项编号确认您的操作:");
        System.out.println("1,查看全部书籍");
        System.out.println("2,添加新书籍");
        System.out.println("3,删除书籍");
        for (int i = 0; i <= 10; i++)
            System.out.print("-");
    }

    /**
     * 判定输入的功能选项参数给出响应
     *
     * @param num 功能选项参数
     * @return 相应的功能执行体
     */
    public static Object judgeIndexNum(int num) {
        if (num == 1) {
            List<Book> bookList = JDBC.findAllBook();
            if (bookList != null)
                System.out.println(bookList);
            else
                System.out.println("查看全部书籍失败");
        } else if (num == 2) {
            Book book = new Book();
            System.out.println("请输入新书籍名");
            book.setBookName(getScanner().nextLine());
            System.out.println("请输入新书籍数量");
            book.setBookAccount(getScanner().nextInt());
            System.out.println("请输入新书籍种类");
            book.setBookKind(getScanner().nextLine());
            Boolean addNewBook = JDBC.addNewBook(book);
            if (Boolean.TRUE.equals(addNewBook))
                System.out.println("添加新书籍成功!");
            else
                System.out.println("添加新书籍失败!");
        } else {
            System.out.println("请输入您想要删除的书籍名:");
            String bookName = getScanner().nextLine();
            Boolean deleteBookByBookName = JDBC.deleteBookByBookName(bookName);
            if (Boolean.TRUE.equals(deleteBookByBookName))
                System.out.println("删除书籍成功!");
            else
                System.out.println("删除书籍失败!");
        }
        return null;
    }

    /**
     * 通过判定返回功能主体页面
     *
     * @param index 返回确认参数
     */
    public static void returnIndex(String index) {
        if (index.equals("index"))
            getIndexNum();
    }

    /*获取输入流,定向系统输入*/
    public static Scanner getScanner() {
        return new Scanner(System.in);
    }
}

4、最后是启动类:

import java.util.Scanner;

public class Start {
    public static void main(String[] args) {
        System.out.println("欢迎登录图书管理系统");
        System.out.println("请输入管理员手机号:");
        Scanner scanner = Util.getScanner();
        String phone =  scanner.nextLine();
        System.out.println("请输入管理员密码:");
        String password = scanner.nextLine();
        System.out.println("正在登录校验........");
        Boolean login = JDBC.login(phone, password);
        if (login){
            System.out.println("亲爱的"+phone+",欢迎登录!");
            com.jdbc.AnLi_2.Util.getIndexNum();
            while (true){
                int num =  com.jdbc.AnLi_2.Util.getScanner().nextInt();
                com.jdbc.AnLi_2.Util.judgeIndexNum(num);
                System.out.println("---------------输入index返回功能主页----------------------");
                String index =  com.jdbc.AnLi_2.Util.getScanner().nextLine();
                com.jdbc.AnLi_2.Util.returnIndex(index);
            }
        }
        else
            System.out.println("登录失败!");

    }
}

这些代码运行起来之后就是按照我们案例上描述的那样运行,实现的是假web页面的交互,当然这个案例对刚学习jdbc的小伙伴们比较有好处哈!

以下是运行的图片展示:

 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ForestSpringH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值