提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:这里可以添加本文要记录的大概内容:
本项目用了一些简单的JAVA,MySQL和JDBC知识。构建项目分为三个步骤,
分别是分析需求,设计数据库,设计代码。
提示:以下是本篇文章正文内容,下面案例可供参考
一、分析需求
(1)录入图书,录入数据格式:图书ID、书名、作者、书号、出版社、出版日期和单价:
(2)修改图书信息,删除图书信息;
(3)查询图书,可按书名、作者、书号或出版社进行图书信息查询;
(4)录入借阅用户信息,包括借阅用户ID、用户名、密码、录入时间;
需求大致是对图书进行增删改查,我可以通过MySQL数字库建立相应的表和字段,然后通过JDBC实现在项目里对数据进行操作。
我们可以提炼出以下需求:
1录入图书 2修改图书 3删除图书 4查询图书 5录入用户
其中查询图书较为特殊,需要实现任意字段查询
二、设计数据库
创建一个数据库,在数据库中分别创建books和users两个表。
(初始时是没有只有字段没有数据的)
books表有表示图书ID、书名、作者、书号、出版社、出版日期和单价的字段。
users表有表示借阅用户ID、用户名、密码、录入时间的字段。
两表都设置ID为主键,自动增长,唯一。
三 设计代码
设计代码有两步,
1项目的架构
2具体实现
项目架构
分为

代码的方式写有连接池的设置
具体实现
项目所需要实现的五个方法的核心都是JDBC,而JDBC有着一个固定流程。所以除去查询图书这个方法,它为了实现任意字段查询需要一个设置二级菜单,有些不同之外,其余方法代码很是相似。不同的点是sql语句和参数处理。
JDBC
( Java DataBase Connectivity ) Java 数据库连接
数据库连接池是个容器,负责分配、管理数据库连接
连接池流程
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.youkuaiyun.com/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();
}
}