如图所示,由监听器调用Service业务类,然后再调用DAO访问数据库。
即是后面的2--1--3 (4 5)
1.ConfigService 设置业务类,这个类是监听器直接调用的类,然后再通过ConfigService去调用ConfigDAO。
为什么需要一个业务类呢? DAO是直接和数据库打交道的,在和数据库打交道之前,还需要对数据进行预处理,这些就可以放在业务类里进行。
ConfigService 业务类做了几个事情
(1). 初始化 init()
因为设置信息里有两个数据,一个是预算,一个是Mysql路径。 这两个信息,无论如何都应该是存在数据库中的。 所以会调用init把他们俩初始化。
(2). init(String key, String value) 方法
首先根据key去查找,如果不存在,就使用value的值插入一条数据。
(3). get(String key)
根据键获取相应的值
(4). update(String key, String value)
更新键对应的值
package service;
import dao.ConfigDAO;
import entity.Config;
public class ConfigService {
public static final String budget = "budget";
public static final String mysqlPath = "mysqlPath";
public static final String default_budget = "500";
static ConfigDAO dao= new ConfigDAO();
static{
init();
}
public static void init(){
init(budget, default_budget);
init(mysqlPath, "");
}
private static void init(String key, String value) {
Config config= dao.getByKey(key);
if(config==null){
Config c = new Config();
c.setKey(key);
c.setValue(value);
dao.add(c);
}
}
public String get(String key) {
Config config= dao.getByKey(key);
return config.getValue();
}
public void update(String key, String value){
Config config= dao.getByKey(key);
config.setValue(value);
dao.update(config);
}
public int getIntBudget() {
return Integer.parseInt(get(budget));
}
}
2.ConfigListener
监听器ConfigListener,这个监听器是用在更新按钮上的
首先判断输入的预算值是否是整数
接着判断输入的MYSQL安装路径是否正确。 判断办法是看路径对应的bin子目录下是否有mysql.exe文件存在
3. 如果上述两个判断都通过了,那么就调用业务类ConfigService来调用dao进行数据更新!!!!! ConfigService cs= new ConfigService();
cs.update(ConfigService.budget,p.tfBudget.getText());
cs.update(ConfigService.mysqlPath,mysqlPath);
- 最后提示设置修改成功
package gui.listener;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import javax.swing.JOptionPane;
import gui.panel.ConfigPanel;
import service.ConfigService;
import util.GUIUtil;
public class ConfigListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
ConfigPanel p = ConfigPanel.instance;
if(!GUIUtil.checkNumber(p.tfBudget, "本月预算"))
return;
String mysqlPath =p.tfMysqlPath.getText();//这部分设计到swing 可以不太理解
if(0!=mysqlPath.length()){
File commandFile = new File(mysqlPath,"bin/mysql.exe");
if(!commandFile.exists()){
JOptionPane.showMessageDialog(p, "Mysql路径不正确");
p.tfMysqlPath.grabFocus();
return;
}
}
ConfigService cs= new ConfigService();
cs.update(ConfigService.budget,p.tfBudget.getText());
cs.update(ConfigService.mysqlPath,mysqlPath);
JOptionPane.showMessageDialog(p, "设置修改成功");
}
}
3.然后DAO的话,就得写一个DAO来操控数据库
public class ConfigDao {
public void update(Config config) {
String sql = "update config set key_= ?, value=? where id = ?";
try (Connection c = DButil.getConnection();
PreparedStatement ps = c.prepareStatement(sql);)
{
ps.setString(1, config.key);
ps.setString(2, config.value);
ps.setInt(3, config.id);
ps.execute();
} catch (SQLException e) {
e.printStackTrace();
}
}
public Config getByKey(String key) {
Config config = null;
String sql = "select * from config where key_ = ?" ;
try (Connection c = DButil.getConnection();
PreparedStatement ps = c.prepareStatement(sql);
) {
ps.setString(1, key);
ResultSet rs =ps.executeQuery();
if (rs.next()) {
config = new Config();
int id = rs.getInt("id");
String value = rs.getString("value");
config.key = key;
config.value = value;
config.id = id;
}
} catch (SQLException e) {
e.printStackTrace();
}
return config;
}
}
4.下面是Entity
package entity;
public class Config {
public int id;
public String value;
public String key;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
}
5.最后不要忘了在ConfigPanel添加监听器
public void addListener() {
ConfigListener l =new ConfigListener();
bSubmit.addActionListener(l);
}
addListener();