前言
Java的图书管理系统的项目非常多,但是大部分连接的数据库都是MySQL、Oracle、SQL Server等,这些数据库以其成熟稳定、社区活跃的特点,在市场中占据了举足轻重的地位。而国产数据库像达梦数据库的却很少见,所以这个项目我打算用达梦数据库来作为数据支撑,体验一下国产数据库数据支撑能力。
作为一个Java的初学者,这个图书管理系统都是一些很基础的布局设置,以及一些基本的操作业务逻辑,连接的达梦数据库的操作和MySQL的没有太大的差异,就是连接时的驱动,数据库名,连接的用户名和密码有不同,sql语句基本能兼容,因此Java代码上没有太大变化。
这是图书管理界面的一些基本界面展示
接下来就是图书管理系统的具体内容
1.连接达梦数据库
点击IDEA菜单上的文件选项,选择项目结构条目,然后在左侧的项目设置里选择库,新建项目库,然后选择达梦数据库安装的文件,找到相应的驱动,具体路径如下
点击应用,接下就是创建一个类,用来连接数据库和处理sql语句,这是我创建的一个叫Database的类。
public class DataBase {
List<User> list;
Connection con;
//驱动程序名
private String driver ;
//URL指向要访问的数据库名
private String url;
//配置时的用户名
private String user;
//配置时的密码
private String password;
public DataBase(){
driver = "dm.jdbc.driver.DmDriver";
url = "jdbc:dm://localhost:5236/SYSDBA";
user = "SYSDBA";
password = "SYSDBA";
try {
Class.forName(driver);
con = DriverManager.getConnection(url,user,password);
if (!con.isClosed()){
System.out.println("数据库连接成功");
}else {
System.out.println("数据库连接失败");
}
}catch (Exception e){
System.out.println("数据库连接失败");
e.printStackTrace();
}
}
}
运行这段代码,在运行后如果打印了数据库连接成功,这说明该项目已经成功连接到了达梦数据库。接下来在达梦数据库中创建相应的表:
普通用户信息表:
CREATE TABLE "SYSDBA"."user"
(
"id" VARCHAR(30) NOT NULL,
"password" VARCHAR(30) NOT NULL,
NOT CLUSTER PRIMARY KEY("id")) STORAGE(ON "MAIN", CLUSTERBTR) ;
管理员信息表:
CREATE TABLE "SYSDBA"."manager"
(
"id" VARCHAR(30) NOT NULL,
"password" VARCHAR(30) NOT NULL,
NOT CLUSTER PRIMARY KEY("id")) STORAGE(ON "MAIN", CLUSTERBTR) ;
图书信息表:
CREATE TABLE "SYSDBA"."book"
(
"bookId" INT AUTO_INCREMENT NOT NULL,
"bookName" VARCHAR(30),
"author" VARCHAR(30),
"publishTime" VARCHAR(30),
"price" DOUBLE,
"bookNumber" INT,
NOT CLUSTER PRIMARY KEY("bookId")) STORAGE(ON "MAIN", CLUSTERBTR) AUTO_INCREMENT = 40;
接下来就可以回到IDEA中,创建界面并设置相应的业务逻辑。
2.图书管理系统代码
用户类
package system;
public class User {
private String id;
private String password;
public User(){
}
public User(String id,String password){
this.id = id;
this.password = password;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
这部分是普通用户和管理员共用的类,包含id和password两个属性,与数据库的表相对应,并提供了setter和getter的方法。
图书类
package system;
public class Book {
private int bookId;
private String bookName;
private String author;
private String publishTime;
private double price;
private int bookNumber;
public Book (){
}
public Book (int bookId,String bookName,String author,String publishTime,double price,int bookNumber){
this.bookId = bookId;
this.bookName = bookName;
this.author = author;
this.publishTime = publishTime;
this.price = price;
this.bookNumber = bookNumber;
}
public int getBookID() {
return bookId;
}
public void setBookID(int bookID) {
this.bookId = bookID;
}
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 getPublishTime() {
return publishTime;
}
public void setPublishTime(String publishTime) {
this.publishTime = publishTime;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public int getBookNumber() {
return bookNumber;
}
public void setBookNumber(int bookNumber) {
this.bookNumber = bookNumber;
}
}
这部分是图书的信息类,包含图书的ID、名称、作者、出版时间、价格和数量,与数据库的表相对应,并提供了setter和getter方法。
数据库操作类(DataBase)
package system;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class DataBase {
Connection con;
//驱动程序名
private String driver ;
//URL指向要访问的数据库名
private String url;
//配置时的用户名
private String user;
//配置时的密码
private String password;
public DataBase(){
driver = "dm.jdbc.driver.DmDriver";
url = "jdbc:dm://localhost:5236/SYSDBA";
user = "SYSDBA";
password = "SYSDBA";
try {
Class.forName(driver);
con = DriverManager.getConnection(url,user,password);
if (!con.isClosed()){
System.out.println("数据库连接成功");
}else {
System.out.println("数据库连接失败");
}
}catch (Exception e){
System.out.println("数据库连接失败");
e.printStackTrace();
}
}
//添加用户
public void addUser(User user){
try {
String sql = "INSERT INTO \"user\"(\"id\",\"password\") VALUES (?,?)";
PreparedStatement pstat = con.prepareStatement(sql);
pstat.setString(1,user.getId());
pstat.setString(2,user.getPassword());
int rs = pstat.executeUpdate();
if (rs != 0){
System.out.println("注册保存成功");
}else {
System.out.println("注册失败");
}
}catch (Exception e){
e.printStackTrace();
}
}
//添加管理员
public void addManager(User user){
try {
String sql = "INSERT INTO \"manager\"(\"id\",\"password\") VALUES (?,?)";
PreparedStatement pstat = con.prepareStatement(sql);
pstat.setString(1,user.getId());
pstat.setString(2,user.getPassword());;
int rs = pstat.executeUpdate();
if (rs != 0){
System.out.println("注册保存成功");
}else {
System.out.println("注册失败");
}
}catch (Exception e){
e.printStackTrace();
}
}
//查看用户id和密码
public ArrayList<User> getUser(){
ArrayList<User> userList = new ArrayList<>();
try{
String sql = "SELECT * FROM \"user\";";
PreparedStatement pstat = con.prepareStatement(sql);
ResultSet rs = pstat.executeQuery();//executeQuery用于执行SQL查询并返回查询结果 ResultSet 包含了查询结果的数据。
while (rs.next()){
User user = new User(rs.getString("id"), rs.getNString("password"));
//使用 ResultSet 对象的 getString 方法从当前行(由 rs.next() 控制)中获取名为 "id" 的列的值,并将其作为字符串返回,password也是如此
userList.add(user);
}
}catch (Exception e){
e.printStackTrace();
}
return userList;
}
//查看管理员id和密码
public ArrayList<User> getManager(){
ArrayList<User> userList = new ArrayList<>();
try{
String sql = "SELECT * FROM \"manager\";";
PreparedStatement pstat = con.prepareStatement(sql);
ResultSet rs = pstat.executeQuery();//executeQuery用于执行SQL查询并返回查询结果 ResultSet 包含了查询结果的数据。
while (rs.next()){
User user = new User(rs.getString("id"), rs.getNString("password"));
//使用 ResultSet 对象的 getString 方法从当前行(由 rs.next() 控制)中获取名为 "id" 的列的值,并将其作为字符串返回,password也是如此
userList.add(user);
}
}catch (Exception e){
e.printStackTrace();
}
return userList;
}
//获取所有用户的账号信息并转化为二维表格
public Object[][] getAllUser(){
ArrayList<User> userList = new ArrayList<>();
Object[][] data = null;
try {
String sql = "SELECT * FROM \"user\";";
PreparedStatement pstat = con.prepareStatement(sql);
ResultSet rs = pstat.executeQuery();
while (rs.next()){userList.add(new User(
rs.getString("id"),
rs.getString("password")
));
if (!userList.isEmpty()){
data = new Object[userList.size()][2];
int i = 0;
for (User user : userList){
data[i][0] = user.getId();
data[i][1] = user.getPassword();
i++;
}
}
}
}catch (Exception e){
e.printStackTrace();
}
return data;
}
//查询用户并转化为二维数组
public Object[][] selectUser(String id){
ArrayList<User> userList = new ArrayList<>();
Object[][] data = null;
try {
String sql = "SELECT * FROM \"user\" WHERE \"id\" = ?;";
PreparedStatement pstat = con.prepareStatement(sql);
pstat.setString(1,id);
ResultSet rs = pstat.executeQuery();
while (rs.next()){userList.add(new User(
rs.getString("id"),
rs.getString("password")
));
if (!userList.isEmpty()){
data = new Object[userList.size()][2];
int i = 0;
for (User user : userList){
data[i][0] = user.getId();
data[i][1] = user.getPassword();
i++;
}
}
}
}catch (Exception e){
e.printStackTrace();
}
return data;
}
//删除用户信息
public void deleteUser(String id){
try {
String sql = "DELETE \"user\" WHERE \"id\" = ?;";
PreparedStatement pstat = con.prepareStatement(sql);
pstat.setString(1,id);
int rs = pstat.executeUpdate();
if (rs != 0){
System.out.println("删除成功");
}else {
System.out.println("删除失败");
}
}catch (Exception e){
e.printStackTrace();
}
}
//修改账号信息
public void changePassword (User user){
try {
String sql = "UPDATE \"user\" SET \"password\"=? WHERE \"id\"=?;";
PreparedStatement pstat = con.prepareStatement(sql);
pstat.setString(1,user.getPassword());
pstat.setString(2,user.getId());
int rs = pstat.executeUpdate();
if (rs != 0){
System.out.println("修改成功");
}else {
System.out.println("修改失败");
}
}catch (Exception e){
e.printStackTrace();
}
}
//插入图书信息
public void addBook(Book book){
try {
String sql = "INSERT INTO \"book\" (\"bookName\",\"author\",\"publishTime\",\"price\",\"bookNumber\") VALUES (?,?,?,?,?);";
PreparedStatement pstat = con.prepareStatement(sql);
pstat.setString(1,book.getBookName());
pstat.setString(2,book.getAuthor());
pstat.setString(3,book.getPublishTime());
pstat.setDouble(4,book.getPrice());
pstat.setInt(5,book.getBookNumber());
int rs = pstat.executeUpdate();
if (rs != 0){
System.out.println("图书信息保存成功");
}else {
System.out.println("图书信息保存失败");
}
}catch (Exception e){
e.printStackTrace();
}
}
//获取全部图书信息
public ArrayList<Book> getAllBook(){
ArrayList<Book> bookList = new ArrayList<>();
try{
String sql = "SELECT * FROM \"book\";";
PreparedStatement pstat = con.prepareStatement(sql);
ResultSet rs = pstat.executeQuery();
while (rs.next()){
Book book = new Book(rs.getInt("bookId"),rs.getString("bookName"),rs.getString("author"),rs.getString("publishTime"),rs.getDouble("price"),rs.getInt("bookNumber"));
bookList.add(book);
}
}catch (Exception e){
e.printStackTrace();
}
return bookList;
}
//获取全部图书信息,并转化为二维数组
public Object[][] getBook() {
ArrayList<Book> BookList = new ArrayList<>();
Object[][] data = null;
try {
String sql = "SELECT * FROM \"book\";";
PreparedStatement pstat = con.prepareStatement(sql);
ResultSet rs = pstat.executeQuery();
while (rs.next()) {
BookList.add(new Book(
rs.getInt("bookId"),
rs.getString("bookName"),
rs.getString("author"),
rs.getString("publishTime"),
rs.getDouble("price"),
rs.getInt("bookNumber")
));
}
if (!BookList.isEmpty()){
data = new Object[BookList.size()][6];
int i = 0;
for (Book book : BookList){
data[i][0] = book.getBookID();
data[i][1] = book.getBookName();
data[i][2] = book.getAuthor();
data[i][3] = book.getPublishTime();
data[i][4] = book.getPrice();
data[i][5] = book.getBookNumber();
i++;
}
}else {
System.out.println("空");
}
} catch (Exception e) {
e.printStackTrace();
}
return data;
}
// 查询图书并转换为表格数据
public Object[][] selectBook(String selectBookName) {
ArrayList<Book> selectBookList = new ArrayList<>();
Object[][] data = null;
try {
String sql = "SELECT * FROM \"book\" WHERE \"bookName\" = ?;";
PreparedStatement pstat = con.prepareStatement(sql);
pstat.setString(1, selectBookName);
ResultSet rs = pstat.executeQuery();
while (rs.next()) {
selectBookList.add(new Book(
rs.getInt("bookId"),
rs.getString("bookName"),
rs.getString("author"),
rs.getString("publishTime"),
rs.getDouble("price"),
rs.getInt("bookNumber")
));
}
if (!selectBookList.isEmpty()){
data = new Object[selectBookList.size()][6];
int i = 0;
for (Book book : selectBookList){
data[i][0] = book.getBookID();
data[i][1] = book.getBookName();
data[i][2] = book.getAuthor();
data[i][3] = book.getPublishTime();
data[i][4] = book.getPrice();
data[i][5] = book.getBookNumber();
i++;
}
}else {
System.out.println("未找到该图书");
}
} catch (Exception e) {
e.printStackTrace();
}
return data;
}
//删除图书
public void deleteBook(int id){
try {
String sql = "DELETE \"book\" WHERE \"bookId\"=?;";
PreparedStatement pstat = con.prepareStatement(sql);
pstat.setInt(1,id);
int rs = pstat.executeUpdate();
if (rs != 0){
System.out.println("删除成功");
}else {
System.out.println("删除失败");
}
}catch (Exception e){