前文中写了一个实现本地文件读写功能的记事本,为了学习数据库的基本操作原理,将原来的记事本改写一下,新增通过数据库读写的功能。
数据表格
database:Test
table: test_file
字段名 | 数据类型 |
---|---|
file_name | varchar(32) |
file_content | varchar(2048) |
file_date | date |
结构设计
使用建造者模式(Builder Pattern)来进行功能划分
StartUp.java 程序的入口
MainUI.java 界面UI
DbFileChooser.java 自己写的一个 数据库文件的选择窗体
DbFileChooseListener.java 用于传输子窗口与父窗口的信息
PageInfo.java 使用pageInfo的类来实现数据库的分页查询的内容存储
MySqlFileSever.java 数据库文件读写的服务端,进行数据库操作方法封装
MySqlFileClient.java 数据库文件读写的客户端,完成底层数据交互
代码实现
StartUp.java
package com.ui.startup;
import com.ui.component.MainUI;
import com.ui.property.ConfigProperty;
public class StartUp {
public static void main(String[] args) {
ConfigProperty cp = new ConfigProperty();
MainUI ui = new MainUI();
ui.init();
System.out.println("startup end");
}
}
MainUI.java
package com.ui.component;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.RandomUtils;
import org.apache.commons.lang3.StringUtils;
import com.ui.listener.DbFileChooseListener;
import com.ui.property.ConfigProperty;
import com.ui.service.FileService;
import com.ui.service.local.LocalFileService;
import com.ui.service.mysql.MysqlFileService;
public class MainUI extends JFrame {
private static final long serialVersionUID = 1L;
private DbFileChoosePanel dbFileChoosePanel = null;
private LocalFileChoosePanel localFileChoosePanel = null;
// private ConfigProperty cp = null;
private MysqlFileService mysqlfileService = null;
private LocalFileService localFileService = null;
private List<Map<String,Object>> mList = null; // 存储查询的所有记录
private String name = null;
private JTextArea jTextArea = null;
private JScrollPane jScrollPane = null;
public MainUI() {
this.mysqlfileService = new MysqlFileService();
this.dbFileChoosePanel = new DbFileChoosePanel();
}
public void init() {
setSize(800, 600);
setLocationRelativeTo(null);
setDefaultCloseOperation(3);
setTitle("新建文件夹.txt - 记事本");
add_Menu();
jTextArea = new JTextArea();
jScrollPane = new JScrollPane(jTextArea);
jScrollPane.setPreferredSize(new Dimension(780, 550));
this.add(jScrollPane, "Center");
this.setVisible(true);
}
private void add_Menu() {
JMenuBar jMenuBar = new JMenuBar();
this.setJMenuBar(jMenuBar);
JMenu jm_file = new JMenu("文件");
JMenu jm_db = new JMenu("数据库");
jMenuBar.add(jm_file);
jMenuBar.add(jm_db);
JMenuItem item1 = new JMenuItem("打开");
JMenuItem item2 = new JMenuItem("保存");
jm_file.add(item1);
jm_file.add(item2);
item1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
openFileUi();
}
});
item2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
saveFileUi();
}
});
JMenuItem item3 = new JMenuItem("打开");
JMenuItem item4 = new JMenuItem("保存");
JMenuItem item5 = new JMenuItem("新建");
jm_db.add(item3);
jm_db.add(item4);
jm_db.add(item5);
item3.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
openDbUi();
}
});
item4.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
saveDbUi();
}
});
item5.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
newDbUi();
}
});
}
private void newDbUi() {
// TODO Auto-generated method stub
this.name = null;
setTitle("新建文件夹");
this.jTextArea.setText("");
}
private void openDbUi() {
// TODO Auto-generated method stub
String content = jTextArea.getText();
int sel;
if(name == null) {
// 第一次打开
if(StringUtils.isNotBlank(content) ) {
// 且进行了输入
sel = showSaveDialog();
if(sel == JOptionPane.YES_OPTION) {
// 选择保存
String[] jlist = {
"请输入新建文件名:"};
this.dbFileChoosePanel.setJlist(jlist);
//this.dbFileChoosePanel.init();
this.dbFileChoosePanel.setVisible(true);
this.dbFileChoosePanel.setDbFileChooseListener(new DbFileChooseListener() {
@Override
public void onEvent(String selected, String input) {
if(input!=null) {
// 输入了文件名称
name = input;
mysqlfileService.save(name, content);
setTitle(name + " - 记事本"); // 保存文件 需重新点击打开
} // 选择取消 则返回
dbFileChoosePanel.setVisible(false);
}
});
} // 选择不保存 则直接打开
} // 是第一次打开 且未进行输入
} else if (!isSaved()) {
// 已打开文件 且修改未保存
sel = showSaveDialog();
if(sel