配置idea将Java与数据库连接起来实现一个简单的图书管理系统

 更新时间:2023年12月27日 15:54:09   作者:灰天768  
这篇文章主要给大家介绍了关于配置idea将Java与数据库连接起来实现一个简单的图书管理系统的相关资料,本文从基于Java的图书管理系统的背景、系统设计、数据库设计和系统实现等方面进行了详细的研究,需要的朋友可以参考下

1.通过connector连接Java和Mysql数据库

(1)首先配置idea

我们此处用的数据库是Mysql8.0版本,注意8.0版本的connector要用8.0,用5.0的后面会报错,下载网址:MySQL :: Download Connector/J 下载完成后点击加号,配置到idea中,配置完成后,idea的externLibrary中会有新添加的类包

 我们的初步任务就完成啦!

(2)如何把java和mysql连接起来

1.简单连接

String url = "jdbc:mysql://localhost:3306/jdbc?useSSL=false";
String user = "root";
String password = "18342003" ; 
try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            con = DriverManager.getConnection(url,user, password);
}catch(SQLEXCEPTION ex){
    ex.printStackTrace();
}finally{
            try {
                con.close();
                st.close();
                rs.close();
            }catch(Exception ex){
                ex.printStackTrace();
            }

        }

通过这样的代码我们可以实现简单的java与mysql的连接,需要注意url = jdbc:mysql://主机名:域名/数据库名称  user = 用户名 password = 密码  有mysql基础的同学应该很容易理解,finally我们关闭连接。这样实现了简单的连接

连接后我们可以写几个sql语句检验是

try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            con = DriverManager.getConnection(url,user, password);

            String sql_insert = "insert into student values(10,'aa',30)";
            String sql_insert1 = "insert into student values(11,'aa',30)";
            String sql_insert2 = "insert into student values(12,'aa',30)";
            String sql_select = "select  * from student";
            //执行sql语句
           st.executeUpdate(sql_insert);
            st.executeUpdate(sql_insert1);
            st.executeUpdate(sql_insert2);
   
            while(rs.next()){
                System.out.println(rs.getInt(1)+","+
                        rs.getString(2)+","+
                        rs.getInt(3)
                        );
            }

        }catch(Exception ex){
            ex.printStackTrace();
        }finally{
            try {
                con.close();
                st.close();
                rs.close();
            }catch(Exception ex){
                ex.printStackTrace();
            }

2.认识PrepareStatement

但是具体在添加数据库中,我们书写sql语句不可能是死的,肯定变化的,所以我们有着PrepareStatement用来写变化的sql语句 具体内容如下

PreparedStatement preparedStatement = con.prepareStatement("insert into student values(?,?,?)");
         preparedStatement.setInt(1,3);
         preparedStatement.setString(2,"abc");
         preparedStatement.setInt(3,20);
         preparedStatement.executeUpdate();

2.实现简单的图书管理系统

(1)创建数据库jdbc,并且创建出book表

可以在cmd命令行中输入create database jdbc;,也可以在navicat中直接创建

 (2)在idea中书写代码将mysql与java连接,实现基本的增删改查

1.JdbcUtiles类,一个使用jdbc的工具类

package myDatebases_Demo;
import java.util.*;
import java.sql.*;

public class JdbcUtil {
    private static final String DRIVER = "com.mysql.cj.jdbc.Driver";
    private static final String URL = "jdbc:mysql://localhost:3306/jdbc?useSSL=false";
    private static final String USER = "root";
    private static final String PASSWORD = "18342003";

    //注册驱动程序放在代码块中,每次只能注册一次
        static {
        try {
            Class.forName(DRIVER);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    //创建getConnection对象,用来获得connection对象
    public static Connection getConnection(){
            Connection conn = null;
            try {
                conn = DriverManager.getConnection(URL,USER,PASSWORD);
            }catch (SQLException e){
                e.printStackTrace();
            }
        return conn;
    }

    //创建free方法实现关闭连接功能
    public static void close(Statement st, Connection conn) {
        if (st != null) {
            try {
                st.close();
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                if (conn != null) {
                    try {
                        conn.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }

    public static void close(ResultSet rs, Statement st, Connection conn) {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                if (st != null) {
                    try {
                        st.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    } finally {
                        if (conn != null) {
                            try {
                                conn.close();
                            } catch (SQLException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                }
            }
        }
    }
}

这个类在任何系统中都可以使用,是一个泛用性的,可以直接复制粘贴,毕竟java是一个面向复制的编程语言

2.BookDb类,实现增删改查

1.增

public static void addBook(Book s) {
        try {
            Connection conn = JdbcUtil.getConnection();
            PreparedStatement pst = conn.prepareStatement("insert into book values (?,?,?)");
            pst.setInt(1, s.getId());
            pst.setString(2, s.getName());
            pst.setString(3, s.getPress());
            pst.executeUpdate();
            JdbcUtil.close(pst, conn);
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
    }

2.删

    //根据书本id删除书本信息
    public static void delectBook(int id){
        try {
            Connection conn = JdbcUtil.getConnection();
            PreparedStatement pst = conn.prepareStatement("delete from book where id = ?");
            pst.setString(1, String.valueOf(id));
            pst.executeUpdate();
            JdbcUtil.close(pst, conn);
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
    }

3.改

//根据书本id更新书本信息
    public static void updateBook(Book b, int id) {
        try {
            Connection conn = JdbcUtil.getConnection();
            PreparedStatement pst = conn.prepareStatement("update book set id = ?,name = ?,press = ? where id = ? ");
            pst.setInt(1, b.getId());
            pst.setString(2, b.getName());
            pst.setString(3, b.getPress());
            pst.executeUpdate();
            JdbcUtil.close(pst, conn);
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
    }

4.查

//根据书本id查询书本的信息
    //保存在一个对象中,用于集中输出,或者放在集合中,用于管理输出等
    public static Book findBookById(int id) {
        Book b = new Book();
        try {
            Connection conn = JdbcUtil.getConnection();
            PreparedStatement pst = conn.prepareStatement("select * from  book where id = ?");
            pst.setInt(1, id);
            ResultSet rs = pst.executeQuery();
            if (rs.next()) {
                b.setId(rs.getInt(1));
                b.setName(rs.getString(2));
                b.setPress(rs.getString(3));
            }
            JdbcUtil.close(rs, pst, conn);
        } catch (SQLException ex) {
            ex.printStackTrace();
        }

        return b;
    }

将信息都放在一个对象容器中,输出时用对象容器进行输出,因为我们具体在mysql中查询一个表的信息时,表的每一类是一个字段,而每一行正好可以对应java中的一个对象,所以我们可以把查到的所有信息都放在一个对象中,代表我们表的每一行

5.显示所有信息

 //查询书本的所有信息,保存在一个集合中,后来再通过集合再把所有结果输出出来,避免此中语句过于冗杂,利于以后的更改
    public static ArrayList<Book> queryBook() {
        ArrayList<Book> list = new ArrayList<>();
        try {
            Connection conn = JdbcUtil.getConnection();
            PreparedStatement pst = conn.prepareStatement("select * from book");
            ResultSet rs = pst.executeQuery();
            while (rs.next()) {
                Book b = new Book();
                b.setId(rs.getInt(1));
                b.setName(rs.getString(2));
                b.setPress(rs.getString(3));
                list.add(b);
            }
            JdbcUtil.close(rs,pst,conn);
        } catch (SQLException ex) {
            ex.printStackTrace();
        }

        return list;
    }

此处便更好理解了,将所得到的每一行都放在list容器中,再输出。

全部代码:

package myDatebases_Demo;

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

public class BookDb {
    public static void addBook(Book s) {
        try {
            Connection conn = JdbcUtil.getConnection();
            PreparedStatement pst = conn.prepareStatement("insert into book values (?,?,?)");
            pst.setInt(1, s.getId());
            pst.setString(2, s.getName());
            pst.setString(3, s.getPress());
            pst.executeUpdate();
            JdbcUtil.close(pst, conn);
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
    }

    //根据书本id删除书本信息
    public static void delectBook(int id){
        try {
            Connection conn = JdbcUtil.getConnection();
            PreparedStatement pst = conn.prepareStatement("delete from book where id = ?");
            pst.setString(1, String.valueOf(id));
            pst.executeUpdate();
            JdbcUtil.close(pst, conn);
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
    }

    //根据书本id更新书本信息
    public static void updateBook(Book b, int id) {
        try {
            Connection conn = JdbcUtil.getConnection();
            PreparedStatement pst = conn.prepareStatement("update book set id = ?,name = ?,press = ? where id = ? ");
            pst.setInt(1, b.getId());
            pst.setString(2, b.getName());
            pst.setString(3, b.getPress());
            pst.executeUpdate();
            JdbcUtil.close(pst, conn);
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
    }

    //根据书本id查询书本的信息
    //保存在一个对象中,用于集中输出,或者放在集合中,用于管理输出等
    public static Book findBookById(int id) {
        Book b = new Book();
        try {
            Connection conn = JdbcUtil.getConnection();
            PreparedStatement pst = conn.prepareStatement("select * from  book where id = ?");
            pst.setInt(1, id);
            ResultSet rs = pst.executeQuery();
            if (rs.next()) {
                b.setId(rs.getInt(1));
                b.setName(rs.getString(2));
                b.setPress(rs.getString(3));
            }
            JdbcUtil.close(rs, pst, conn);
        } catch (SQLException ex) {
            ex.printStackTrace();
        }

        return b;
    }

    //查询书本的所有信息,保存在一个集合中,后来再通过集合再把所有结果输出出来,避免此中语句过于冗杂,利于以后的更改
    public static ArrayList<Book> queryBook() {
        ArrayList<Book> list = new ArrayList<>();
        try {
            Connection conn = JdbcUtil.getConnection();
            PreparedStatement pst = conn.prepareStatement("select * from book");
            ResultSet rs = pst.executeQuery();
            while (rs.next()) {
                Book b = new Book();
                b.setId(rs.getInt(1));
                b.setName(rs.getString(2));
                b.setPress(rs.getString(3));
                list.add(b);
            }
            JdbcUtil.close(rs,pst,conn);
        } catch (SQLException ex) {
            ex.printStackTrace();
        }

        return list;
    }
}

3.testMain类,运行处

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.Scanner;

public class testMain {
    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);


        while (true) {
            Meau();
            int choose = sc.nextInt();
            switch (choose) {
                case 1:
                    Book b = getBook();
                    BookDb.addBook(b);
                    //看了好多文章,好像都无法实现清空控制台的功能,这个是最实用的
                    break;
                case 2:
                    System.out.println("请输入想要删除的书本的id");
                    int id = sc.nextInt();
                    BookDb.delectBook(id);

                    break;
                case 3:
                    System.out.println("请输入想要更新的书本的id");
                    Book b1 = getBook();
                    int id1 = sc.nextInt();
                    BookDb.updateBook(b1,id1);

                    break;
                case 4:
                    System.out.println("请输入想要查询的书本的id");
                    int id2 = sc.nextInt();
                    Book b2 = BookDb.findBookById(id2);
                    System.out.println("id\t\t name\t\t press\t");
                    System.out.println(b2.getId()+"\t\t"+b2.getName()+"\t\t"+b2.getPress());

                    break;
                case 5:
                    System.out.println(BookDb.queryBook().size());
                    queryBook(BookDb.queryBook());
                    break;
            }
        }
    }

    public static void queryBook(ArrayList<Book> list){
        System.out.println("id\t\t name\t\t press\t");
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i).getId()+"\t\t"+list.get(i).getName()+"\t\t"+list.get(i).getPress()+"\t");
        }

    }

    public static Book getBook(){
        Book b = new Book();
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入书本id:");
        b.setId(sc.nextInt());
        System.out.println("请输入书本名称:");
        b.setName(sc.next());
        System.out.println("请输入书本出版社名称: ");
        b.setPress(sc.next());

        return b;
    }

    public static void Meau(){
        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 退出");
    }
}

看一下效果

嘿嘿,这样我们就完成啦!!

总结

到此这篇关于配置idea将Java与数据库连接起来实现一个简单的图书管理系统的文章就介绍到这了,更多相关Java与数据库实现图书管理系统内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • spring boot读取Excel操作示例

    spring boot读取Excel操作示例

    这篇文章主要介绍了spring boot读取Excel操作,结合实例形式详细分析了spring boot解析、读取Excel相关操作技巧,需要的朋友可以参考下
    2019-11-11
  • 使用Java拼接长图/网格图的避坑指南

    使用Java拼接长图/网格图的避坑指南

    在日常开发中,我们经常会遇到需要将多张图片拼接成一张大图的场景,今天就来盘点一下 Java 图片拼接中最容易踩的 4 个大坑,以及完美的避坑指南,需要的朋友可以参考下
    2026-04-04
  • Hibernate持久化对象生命周期原理解析

    Hibernate持久化对象生命周期原理解析

    这篇文章主要介绍了Hibernate持久化对象生命周期原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • java与微信小程序实现websocket长连接

    java与微信小程序实现websocket长连接

    这篇文章主要为大家详细介绍了java与微信小程序实现websocket长连接,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05
  • java结合keytool如何实现非对称签名和验证详解

    java结合keytool如何实现非对称签名和验证详解

    这篇文章主要给大家介绍了关于java结合keytool如何实现非对称签名和验证的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-08-08
  • 详解SpringBoot容器的生命周期

    详解SpringBoot容器的生命周期

    在使用SpringBoot进行开发时,我们经常需要对Spring容器的生命周期进行了解和掌握,本文将介绍SpringBoot容器的生命周期,包括容器的创建、初始化、销毁等过程,并提供相应的代码示例
    2023-06-06
  • 如何使用jakarta.json进行json序列化和反序列化

    如何使用jakarta.json进行json序列化和反序列化

    java里,json框架何其多,常见的有jackson、fastjson、gson等,本文重点介绍如何使用jakarta.json进行json序列化和反序列化,需要的朋友可以参考下,
    2024-07-07
  • java后台接收app上传的图片的示例代码

    java后台接收app上传的图片的示例代码

    本篇文章主要介绍了java后台接受app上传的图片的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • 基于Java实现将word,excel文件转换为pdf的工具类

    基于Java实现将word,excel文件转换为pdf的工具类

    这篇文章主要为大家详细介绍了如何使用Java编写一个工具类,可以实现将word,excel文件转换为pdf格式和将pdf文档转换为image格式,希望对大家有所帮助
    2025-08-08
  • javaFX实现五子棋小游戏

    javaFX实现五子棋小游戏

    这篇文章主要为大家详细介绍了javaFX实现五子棋小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-07-07

最新评论