📄 datagenerator.java
字号:
import javax.swing.*;
import javax.swing.table.*;
import javax.swing.event.*;
import java.awt.*;
import java.util.*;
import java.sql.*;
import java.awt.event.*;
import edu.njust.cs.*;
//该程序模拟各块电表在指定年月的抄表数据
//启动该程序后,用户只要输入年月
//点击确定后,该模拟程序自动读取电表信息
//表 (DBT)中所有的电表信息,生成每块电表
//的读数并写入抄表信息表 (CBXXT)
public class DataGenerator{
public static void main(String []args){
//取得指定时间
String yearMonth=null;
while(true){
yearMonth=JOptionPane.showInputDialog("请指定年月(例如2005-01):");
if(yearMonth==null) System.exit(-1);
else if (DateUtil.isValidYMFormat(yearMonth))
break;
}
//取得数据库连接
Properties prop=SqlUtil.loadProperty("config/config.properties");
if(prop==null){
JOptionPane.showMessageDialog(null,
"配置文件丢失!",
"提示",
JOptionPane.INFORMATION_MESSAGE);
System.exit(-1);
}
Connection con=null;
try{
con=SqlUtil.acquireConnection(prop.getProperty("DB_IP"),
prop.getProperty("DB_PORT"),
prop.getProperty("DB_NAME"),
prop.getProperty("DB_USER_NAME"),
prop.getProperty("DB_USER_PWD"));
}catch(Exception e){
con=null;
e.printStackTrace();
System.exit(-1);
}
//读取所有电表ID至一个表模型中
String []columnNames=new String[] {"电表编号"};
Class []dataType=new Class[] {String.class};
CustomTableModel model=new CustomTableModel(
0,columnNames.length,columnNames,dataType);
SqlUtil.readDBToTable(con,"select DBID from DBT",model,dataType);
//将用户指定的年月前推一个月
//yearMonth原来"2004-03",那么得到lastYearMonth为"2004-02"
GregorianCalendar yearMonth_GC=DateUtil.getGCFromTS(
DateUtil.getTSFromYMD(yearMonth+"-20"));
yearMonth_GC.add(Calendar.MONTH,-1);
String lastYearMonth=DateUtil.getYMDFromTS(
DateUtil.getTSFormGC(yearMonth_GC)).substring(0,7);
//依次产生每块电表的抄表数据
//如果某块电表上月读数存在,则本月读数=上月读数+正随机数
//否则,本月读数=正随机数
for(int i=0;i<model.getRowCount();i++){
Object []keys={model.getValueAt(i,0).toString(), yearMonth};
//如果当前电表在指定年月的抄表数据已经有,则忽略
String sql="select * from CBXXT where DBID=? AND CBYearMonth=?";
if(SqlUtil.isRecordExist(con,sql,keys)){
System.out.println("电表"+model.getValueAt(i,0).toString()+
" "+yearMonth+"的抄表数据已经存在");
continue;
}
System.out.println("产生电表"+model.getValueAt(i,0).toString()+
" "+yearMonth+"的抄表数据...");
sql="select DBDS from CBXXT where DBID='"+
model.getValueAt(i,0).toString()+"' and CBYearMonth='"
+lastYearMonth+"'";
//上月读数
Double syds=(Double)SqlUtil.readFieldValueFromDB(con,sql);
double byds;
//上月有读数
if(syds!=null&&syds.doubleValue()!=Double.NEGATIVE_INFINITY)
byds=syds.doubleValue()+(100*(Math.random())+10);
else
byds=(100*(Math.random())+10);
Object []line={model.getValueAt(i,0).toString(),yearMonth,new Double(byds)};
SqlUtil.addRowToDB(con,"insert into CBXXT values (?,?,?)",line);
}
System.exit(0);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -