基于JDBC的书库系统(MySQL)

一、创建数据库中的表

1、需求

   有一张表叫javabook【创建表要求使用sql语句进行】
     表中列   bookid  整数自增类型
     表中列   bprice  小数类型
     表中列   bookname  字符串类型 长度不能小于50

工程和包要求:
            domain
            dao
            service
            test

2、实现

create table javabook(
    bookid int primary key auto_increment,
    bprice decimal(8,2),
    bookname varchar(50) not null
);

3、项目结构

二、Idea连接数据库

1、创建文件目录

2、导入文件Jar包

3、连接数据库

package dao;

import java.sql.Connection;
import java.sql.DriverManager;

/**
 * @program: Pay.java
 * @ClassName BaseDao
 * @description:
 * @author: 苏芮溪
 * @create: 2024−11-11 20:10
 * @Version 1.0
 **/

public class BaseDao {
    public static final String DRIVERCLASSNAME = "com.mysql.cj.jdbc.Driver";
    public static final String URL = "jdbc:mysql://localhost:3306/ruixi?sslMode=REQUIRED&characterEncoding=UTF-8&connectionTimeZone=GMT%2B8&forceConnectionTimeZoneToSession=true";
    public static final String USER = "root";
    public static final String PASS = "admin";

    /**
     * 获取数据库连接
     */
    public Connection getConnection() {
        //创建连接引用
        Connection conn = null;
        try {
            //装载驱动
            Class.forName(DRIVERCLASSNAME);
            //连接数据库
            conn = DriverManager.getConnection(URL, USER, PASS);
            //输出连接
            System.out.println(conn);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return conn;
    }
}

三、编写Java代码

1、entity层的实体

package entity;

/**
 * @program: Pay.java
 * @ClassName Book
 * @description:
 * @author: 苏芮溪
 * @create: 2024−11-12 18:40
 * @Version 1.0
 **/

public class Book {
    private int bid;
    private String bname;
    private double price;

    public Book(String bname, double price) {
        this.bname = bname;
        this.price = price;
    }

    public void setBid(int bid) {
        this.bid = bid;
    }

    public int getBid() {
        return bid;
    }

    public String getBname() {
        return bname;
    }

    public double getPrice() {
        return price;
    }

    @Override
    public String toString() {
        return "Book{" +
                "bid=" + bid +
                ", bname='" + bname + '\'' +
                ", price=" + price +
                '}';
    }
}

2、Dao层

2.1、Dao层连接

package dao;

import java.sql.*;

/**
 * @program: Pay.java
 * @ClassName BaseDao
 * @description:
 * @author: 苏芮溪
 * @create: 2024−11-11 20:10
 * @Version 1.0
 **/

public class BaseDao {
    public static final String DRIVERCLASSNAME = "com.mysql.cj.jdbc.Driver";
    public static final String URL = "jdbc:mysql://localhost:3306/ruixi?sslMode=REQUIRED&characterEncoding=UTF-8&connectionTimeZone=GMT%2B8&forceConnectionTimeZoneToSession=true";
    public static final String USER = "root";
    public static final String PASS = "admin";

    /**
     * 获取数据库连接
     */
    public Connection getConnection() {
        Connection conn = null;
        try {
            //装载驱动.3

            Class.forName(DRIVERCLASSNAME);
            //连接数据库
            conn = DriverManager.getConnection(URL, USER, PASS);
            System.out.println(conn);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return conn;
    }

    void closedAll(Connection conn, PreparedStatement ps, ResultSet rs) {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (ps != null) {
            try {
                ps.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

}

2.2、Dao层接口

package dao;
import entity.Book;

import java.util.List;

/**
 * @program: Pay.java
 * @ClassName BookDao
 * @description:
 * @author: 苏芮溪
 * @create: 2024−11-12 18:35
 * @Version 1.0
 **/

public interface BookDao {
    //添加书
    void addBook(Book book);
    //更新书
    void updateBook(Book book);
    //根据书名删除书
    void deleteAllBooks(String bname);
    //模糊查询书
    List<Book> findBooks(String bname);
}

2.3、Dao层impl实现

package dao.impl;

import dao.BaseDao;
import dao.BookDao;
import entity.Book;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 * @program: Pay.java
 * @ClassName BookDaoImpl
 * @description:
 * @author: 苏芮溪
 * @create: 2024−11-12 18:40
 * @Version 1.0
 **/

public class BookDaoImpl extends BaseDao implements BookDao {
    @Override
    public void addBook(Book book) {
        //创建连接引用
        Connection conn = null;
        //创建操作引用
        PreparedStatement ps = null;
        //SQL操作语句
        String sql = "insert into javabook(bprice,bookname) values(?,?)";
        try {
            //进行数据库连接(调用BaseDao中的方法)
            conn = getConnection();
            //创建操作对象
            ps = conn.prepareStatement(sql);
            //处理sql操作参数
            ps.setDouble(1, book.getPrice());
            ps.setString(2, book.getBname());
            //执行 插入修改删除
            ps.executeUpdate();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }finally {
            closedAll(conn, ps, null);
        }
    }

    @Override
    public void updateBook(Book book) {
        //创建连接引用
        Connection conn = null;
        //创建操作引用
        PreparedStatement ps = null;
        //SQL操作语句
        String sql = "update javabook set bprice=?,bookname=? where bookid=?";
        try {
            //进行数据库连接(调用BaseDao中的方法)
            conn = getConnection();
            //创建操作对象
            ps = conn.prepareStatement(sql);
            //处理sql操作参数
            ps.setDouble(1, book.getPrice());
            ps.setString(2, book.getBname());
            ps.setInt(3,book.getBid());
            //执行 插入修改删除
            ps.executeUpdate();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }finally {
            closedAll(conn, ps, null);
        }
    }

    @Override
    public void deleteAllBooks(String bname) {
//创建连接引用
        Connection conn = null;
        //创建操作引用
        PreparedStatement ps = null;
        //SQL操作语句
        String sql = "delete from javabook where bookname=?";
        try {
            //进行数据库连接(调用BaseDao中的方法)
            conn = getConnection();
            //创建操作对象
            ps = conn.prepareStatement(sql);
            //处理sql操作参数
            ps.setString(1, bname);
            //执行 插入修改删除
            ps.executeUpdate();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }finally {
            closedAll(conn, ps, null);
        }
    }

    @Override
    public List<Book> findBooks(String bname) {
        //存储数据
        List<Book> books = new ArrayList<Book>();
        //创建连接引用
        Connection conn = null;
        //创建操作引用
        PreparedStatement ps = null;
        //SQL操作语句
        String sql = "select * from javabook where bname like ?";
        try {
            //进行数据库连接(调用BaseDao中的方法)
            conn = getConnection();
            //创建操作对象
            ps = conn.prepareStatement(sql);
            //处理sql操作参数
            ps.setString(1, "%"+bname+"%");
            //执行 插入修改删除
            ResultSet resultSet = ps.executeQuery();
            while (resultSet.next()) {
                Book book = new Book(resultSet.getString("bname"),resultSet.getDouble("bprice"));
                book.setBid(resultSet.getInt("id"));
                books.add(book);
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }finally {
            closedAll(conn, ps, null);
        }


        return books;
    }

}

3、Service层

3.1、接口

package service;

import entity.Book;

import java.util.List;

/**
 * @program: Pay.java
 * @ClassName BookService
 * @description:
 * @author: 苏芮溪
 * @create: 2024−11-12 19:20
 * @Version 1.0
 **/

public interface BookService {
    //添加书
    void addBook(Book book);
    //更新书
    void updateBook(Book book);
    //根据书名删除书
    void deleteAllBooks(String bname);
    //模糊查询书
    List<Book> findBooks(String bname);
}

3.2、实现

package service.impl;

import dao.BookDao;
import dao.impl.BookDaoImpl;
import entity.Book;
import service.BookService;

import java.util.List;

/**
 * @program: Pay.java
 * @ClassName BookServiceImpl
 * @description:
 * @author: 苏芮溪
 * @create: 2024−11-12 19:22
 * @Version 1.0
 **/

public class BookServiceImpl implements BookService {
    //面向接口编程
    private BookDao bookDao;

    public BookServiceImpl() {
        bookDao = new BookDaoImpl();
    }

    @Override
    public void addBook(Book book) {
        bookDao.addBook(book);
    }

    @Override
    public void updateBook(Book book) {
        bookDao.updateBook(book);
    }

    @Override
    public void deleteAllBooks(String bname) {
        bookDao.deleteAllBooks(bname);
    }

    @Override
    public List<Book> findBooks(String bname) {
        return bookDao.findBooks(bname);
    }
}

4、测试类

package test;

import entity.Book;
import service.BookService;
import service.impl.BookServiceImpl;

import java.util.List;

/**
 * @program: Pay.java
 * @ClassName Test
 * @description:
 * @author: 苏芮溪
 * @create: 2024−11-12 19:24
 * @Version 1.0
 **/

public class Test {
    public static void main(String[] args) {
        Book book1 = new Book("java入门",12.5);
        Book book2 = new Book("java初级",25);
        Book book3 = new Book("java高级",50);

        //插入三本书
        BookService bs = new BookServiceImpl();
        bs.addBook(book1);
        bs.addBook(book2);
        bs.addBook(book3);

        //用汇编覆盖掉java初级
        Book book4 = new Book("汇编",22.5);
        book4.setBid(2);
        bs.updateBook(book4);

        //通过书名删除
        String bname = "java入门";
        bs.deleteAllBooks(bname);

        //模糊查询书名带有”java“的书
        List<Book> books = bs.findBooks("java");
        for (Book book : books) {
            System.out.println(book);
        }

    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/914597.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

内置RTK北斗高精度定位的4G执法记录仪、国网供电服务器记录仪

内置RTK北斗高精度定位的4G执法记录仪、国网供电服务器记录仪BD311R 发布时间: 2024-10-23 11:28:42 一、 产品图片&#xff1a; 二、 产品特性&#xff1a; 4G性能&#xff1a;支持2K超高清图传&#xff0c;数据传输不掉帧&#xff0c;更稳定。 独立北…

腾讯音乐2024Q3财报:“稳”是核心,再进一步

11月12日&#xff0c;腾讯音乐娱乐集团&#xff08;以下简称“腾讯音乐”&#xff09;发布了截至2024年9月30日止的第三季度未经审计财务报告&#xff0c;各项核心财务指标均符合市场预期。本季度总收入为70.2亿元&#xff0c;同比增长6.8%&#xff1b;调整后净利润为19.4亿元&…

地宫取宝(摘花生+最长上升子序列)C++

1212. 地宫取宝 - AcWing题库 #include <iostream>using namespace std;const int N 55; const int MOD 1000000007;int w[N][N],f[N][N][13][14]; int n,m,k;int main() {cin >> n >> m >> k;for (int i 1;i < n;i) {for (int j 1;j < m;j)…

2024 年 8 个最佳 API 设计工具图文介绍

8 个最佳 API 设计工具推荐&#xff0c;包括 Apifox、Postman、Swagger、Insomnia、Stoplight、Hoppscotch、RapidAPI和Paw。 详细介绍&#xff1a;2024 年 8 个最佳 API 设计工具推荐

minio 分布式

方案设计 需要5台服务器&#xff0c;一台nginx用作分发请求&#xff0c;4台minio服务器&#xff0c;每个minio服务器上至少2个盘。在这个方法中&#xff0c;我使用了lvm的缓存&#xff0c;在同种固态盘的情况下&#xff0c;可以使读性能提高数倍到十倍&#xff0c;使写性能提高…

kettle开发-Day43-数据对比

前言&#xff1a; 随着数字化的深入&#xff0c;各种系统及烟囱的建立&#xff0c;各系统之间的架构和数据存储方式不同&#xff0c;导致做数据仓库或数据湖时发现&#xff0c;因自建的系统或者非标准化的系统经常存在物理删除而不是软删除。这就延伸出一个问题&#xff0c;经常…

vscode中执行git合并操作需要输入合并commit信息,打开的nano小型文本编辑器说明-

1.前提&#xff1a; VScode中的git组件执行任何合并动作的时候需要提交远程合并的commit信息&#xff0c;然后编辑器自动打开的是nano文本编辑器 2.nano编辑器说明&#xff1a; 1.保存文件&#xff1a;按 Ctrl O&#xff0c;然后按 Enter 来保存文件。 2.退出编辑器&#xf…

Android音视频直播低延迟探究之:WLAN低延迟模式

Android WLAN低延迟模式 Android WLAN低延迟模式是 Android 10 引入的一种功能&#xff0c;允许对延迟敏感的应用将 Wi-Fi 配置为低延迟模式&#xff0c;以减少网络延迟&#xff0c;启动条件如下&#xff1a; Wi-Fi 已启用且设备可以访问互联网。应用已创建并获得 Wi-Fi 锁&a…

如何详细查询全球药品研发的进度信息?

药品的研发进展对于医药研发人员来说&#xff0c;不仅是知识和技能的积累&#xff0c;更是职业精神和价值观的塑造。通过了解药品的研发进展&#xff0c;研发人员可以更好地提高自己的专业知识和技能&#xff0c;激发创新思维&#xff0c;保持专业竞争力&#xff0c;提高研发效…

摄像机视频分析软件下载LiteAIServer视频智能分析软件抖动检测的技术实现

在现代社会中&#xff0c;视频监控系统扮演着至关重要的角色&#xff0c;其可靠性和有效性在很大程度上取决于视频质量。然而&#xff0c;由于多种因素&#xff0c;如摄像机安装不当、外部环境振动或视频信号传输的不稳定&#xff0c;视频画面常常出现抖动问题&#xff0c;这不…

Jmeter中的监听器(一)

监听器 1--查看结果树 用途 调试测试计划&#xff1a;查看每个请求的详细信息&#xff0c;帮助调试和修正测试计划。分析响应数据&#xff1a;查看服务器返回的响应数据&#xff0c;验证请求是否成功。检查错误&#xff1a;识别和分析请求失败的原因。 配置步骤 添加查看结果…

PaaS云原生:分布式集群中如何构建自动化压测工具

场景 测试环境中&#xff0c;压测常常依赖环境中的各种工具获取基础信息&#xff0c;而这些工具可能集中在某个中控机上&#xff0c;此时想打造的自动化工具的运行模式是&#xff1a; 通过中控机工具获取压测所需的基本信息在中控机部署压测工具&#xff0c;实际压测任务分发…

数据结构-递归函数的调用栈过程

这道题考察的是递归函数的调用栈过程。 逐步分析程序的执行过程&#xff1a; main() 函数首先被调用&#xff0c;此时栈底是 main() 的信息。main() 函数调用 S(1)&#xff0c;此时 S(1) 的信息被压入栈中&#xff0c;位于 main() 之上。S(1) 函数内部调用 S(0)&#xff0c;因…

华为OD机试 - 芯片资源限制(Python/JS/C/C++ 2024 C卷 100分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华为OD刷题交流群&#xff0c;…

基于 Python 的 Django 框架开发的电影推荐系统

项目简介&#xff1a;本项目是基于 Python 的 Django 框架开发的电影推荐系统&#xff0c;主要功能包括&#xff1a; 电影信息爬取&#xff1a;获取并更新电影数据。数据展示&#xff1a;提供电影数据的列表展示。推荐系统&#xff1a;基于协同过滤算法实现个性化推荐。用户系…

使用 Web Search 插件扩展 GitHub Copilot 问答

GitHub Copilot 是一个由 GitHub 和 OpenAI 合作开发的人工智能代码提示工具。它可以根据上下文提示代码&#xff0c;还可以回答各种技术相关的问题。但是 Copilot 本身不能回答非技术类型的问题。为了扩展 Copilot 的功能&#xff0c;微软发布了一个名为 Web Search 的插件&am…

Sorting 排序

Goto Data Grid 数据网格 Sorting 排序 Sort Data 对数据进行排序 默认情况下&#xff0c;最终用户可以按任何列对数据进行排序&#xff0c;但具有 MemoExEdit、ImageEdit 和 PictureEdit 就地编辑器的列除外。在运行时&#xff0c;单击列标题一次可对数据进行升序排序。后续…

【笔记】Springboo项目启动失败

application run failed org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name adviceMapper defined in file 原因是mybatisplus和springboot的版本不匹配 修改后&#xff1a; springboot mybatisplus 成功

力扣 LeetCode 242. 有效的字母异位词(Day3:哈希表)

解题思路&#xff1a; 哈希表三种数据结构的选择 1. 数组&#xff1a;适用于数据量小的情况 2. set&#xff1a;适用于数据量大的情况 3. map&#xff1a;适用于key-value 什么时候用哈希表&#xff1f; 给你一个元素&#xff0c;判断该元素在这个集合里是否出现过 本题使…

项目财务管理软件有哪些优势?8款工具解析

本文分享的8款项目财务管理工具包括:1.PingCode&#xff1b;2.Worktile&#xff1b;3.用友U8&#xff1b;4.金蝶K3&#xff1b;5.泛微e-cology&#xff1b;6.明源云&#xff1b;7.Microsoft Project&#xff1b;8.QuickBooks。 在众多项目财务管理工具中挑选合适的一款&#xf…