OpenGauss数据库课程设计
本课程设计以OpenGauss作为数据库,使用java的图形化界面实现窗口间的信息交互。
特色: 实现了 表的增删改查,触发器的建立,数据的转储,精确查询与模糊查询。
1.触发器
主要的借还书功能用数据库的触发器实现,且OpenGauss数据库需要先创建触发器函数,再调用,比较特殊。函数如下:
【借书触发器函数代码:】
CREATE OR REPLACE FUNCTION public.update_books()
RETURNS trigger
LANGUAGE plpgsql
NOT FENCED NOT SHIPPABLE
AS $$
DECLARE
BEGIN
UPDATE books SET stock=stock-1 WHERE title=NEW.book;
RETURN NEW;
END
$$;
【还书触发器函数代码:】
CREATE OR REPLACE FUNCTION public.update_books2()
RETURNS trigger
LANGUAGE plpgsql
NOT FENCED NOT SHIPPABLE
AS $$
DECLARE
BEGIN
UPDATE books SET stock=stock+1 WHERE title=OLD.book;
RETURN NEW;
END
$$;
【OpenGauss数据库表的代码】
CREATE TABLE admindt (
id bigint NOT NULL,
username varchar(30) NOT NULL,
password varchar(30) NOT NULL,
againcode char(30) NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE books (
ID bigint NOT NULL ,
ISBN varchar(30) NOT NULL,
TITLE varchar(30) NOT NULL,
PUBLISH varchar(30) NOT NULL,
STOCK bigint NOT NULL,
PRIMARY KEY (ID)
);
CREATE TABLE borrow (
ID bigint NOT NULL,
book varchar(30) NOT NULL,
reader varchar(30) NOT NULL,
borrow_date date NOT NULL,
return_date date NOT NULL,
PRIMARY KEY (ID)
);
CREATE TABLE readers (
ID bigint NOT NULL,
name varchar(50) NOT NULL,
code varchar(30) NOT NULL,
major varchar(30) NOT NULL,
stu_id varchar(30) NOT NULL,
sex varchar(6) check(sex=‘男’or sex=‘女’),
born bigint NOT NULL,
fine bigint DEFAULT NULL,
date date NOT NULL,
PRIMARY KEY (ID)
);
2.转储 和 模糊查询
1.对查询到的图书信息进行转储,在桌面自动生成一个.txt文件进行保存。
2.模糊插叙是使用SQL的LIKE语句。
【java代码:】
public void actionPerformed(ActionEvent e) {
try {
if(e.getSource()==query[0]){
String txstr[]=new String[4];
for(int i=0;i<4;i++){
txstr[i]=jtfarr[i].getText().trim();
}
if(txstr[0].equals("")&&txstr[1].equals("")&&txstr[2].equals("")&&txstr[3].equals("")){
JOptionPane.showMessageDialog(null, "不能全为空");
return;
}
if(!txstr[0].equals("")){
sql="select * from books where ID ="+txstr[0];
}else if(!txstr[1].equals("")){
sql="select * from books where ISBN ='"+txstr[1]+"'";
}else if(!txstr[2].equals("")){
sql="select * from books where TITLE ='"+txstr[2]+"'";
}else if(!txstr[3].equals("")){
sql="select * from books where PUBLISH ='"+txstr[3]+"'";
}
ResultSet rs = stmt.executeQuery(sql);
if(rs.next()){
rs.getMetaData();
int column = rs.getMetaData().getColumnCount();//表格列数
do{
tabstr=tabstr+bbnume[0];
for (int i = 0; i < column; i++) {//获取除表头的每一行
tabstr=tabstr+rs.getString(i + 1)+bbnume[i+1];
}
tabstr=tabstr+"\n";
}while(rs.next());
tabArea.setText(tabstr);
JSP.add(tabArea);
//数据的转储,outFilepath已经声明
try {
BufferedWriter bw=new BufferedWriter(new FileWriter(outFilePath));
bw.append(tabArea.getText());
bw.close();
}catch(IOException ee) {
ee.printStackTrace();
}
tabstr="";//置空字符串,使下一次正常输出
}else{
JOptionPane.showMessageDialog(null, "输入不存在");
return;
}
}else if(e.getSource()==query[1]){
String vastr[]=new String[2];
for(int i=0;i<2;i++){
vastr[i]=v_search[i].getText().trim();
}
if(v_str[0].equals(vastr[0])&&v_str[1].equals(vastr[1])){
JOptionPane.showMessageDialog(null, "请输入关键词");
return;
}
if(!v_str[0].equals(vastr[0])){
sql="select * from books where TITLE like '%"+vastr[0]+"%';";//模糊查询
}else if(!v_str[1].equals(vastr[1])){
sql="select * from books where PUBLISH like '%"+vastr[1]+"%';";
}
【界面视图如下】
【主界面】
【未登录查书/借书界面】
【读者/管理员用户登记】
【读者中心】
【借书成功】
【还书】
【管理员中心】
【用户注册】
【注册管理员】
【删除用户】
【增加图书】
【删除图书】
【全部java代码和图片】:https://download.csdn.net/download/SuperOnly2222/21090031