DBStore入库模块
1.新建Oracle数据库
循环建表
--使用PL/SQL删除表
BEGIN
FOR i IN 1..31 LOOP
EXECUTE IMMEDIATE
'DROP TABLE e_detail_'||TO_CHAR(i);
END LOOP;
END;
/
--使用PL/SQL建表
BEGIN
FOR i IN 1..31 LOOP
EXECUTE IMMEDIATE
'CREATE TABLE e_detail_'||TO_CHAR(i)||
'(
name varchar2(20),
srcId varchar2(5),
dstId varchar2(5),
sersorAddress varchar2(7),
count number(2),
cmd varchar2(5),
status number(2),
data number(9,4),
gather_date date
)';
END LOOP;
END;
/
(/表示缓存)
2.新建ConnectionFactory工厂类
使用JDBC连接Oracle数据库。
3.创建DBStore接口和实现类
先获取连接,遍历传过来的集合得到Environment对象,判断日期,PreparedStatement执行SQL语句,使用批处理技术,插入数据库。
注意:Timestamp对象的getDate()方法返回day of month
Timestamp对象的getDay()返回0-6(对应的星期天到星期六)
ps.addBatch();
public void dealBatch() {
if (ps != null) {
try {
ps.executeBatch();
ps.clearBatch();
ps.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
判断入库天数并计数
搞了很久
public void save(Collection<Environment> coll) throws Exception {
connection = ConnectionFactory.getConnection();
// 表示当前sql语句数
int count = 0;
/*
* 记录当前天数,默认为0
*/
int day = 0;
for (Environment environment : coll) {
/*
* 先判断要不要创建新的ps对象。 如果为null或者天数改变,则创建新的对象
*/
/*
* 注意:Timestamp对象的getDate()方法返回day of month
* Timestamp对象的getDay()返回0-6(对应的星期天到星期六)
*/
if (day != environment.getGather_date().getDate() && day != 0) {
// 手动提交前一天的数据
dealBatch();
log.info("数据库入库的数据" + count);
day = environment.getGather_date().getDate();
log.info("数据库入库的天数:" + day);
// 根据日期不同,产生不同的sql语句
String sql = "insert into e_detail_" + day + " values(?,?,?,?,?,?,?,?,?)";
ps = connection.prepareStatement(sql);
} else if (ps == null) {
day = environment.getGather_date().getDate();
log.info("数据库入库的天数:" + day);
String sql = "insert into e_detail_" + day + " values(?,?,?,?,?,?,?,?,?)";
ps = connection.prepareStatement(sql);
}
ps.setString(1, environment.getName());
ps.setString(2, environment.getSrcid());
ps.setString(3, environment.getDesid());
ps.setString(4, environment.getSersorAddress());
ps.setInt(5, environment.getCount());
ps.setString(6, environment.getCmd());
ps.setInt(7, environment.getStatus());
ps.setFloat(8, environment.getData());
ps.setTimestamp(9, environment.getGather_date());
// 将sql语句放入到批处理中
ps.addBatch();
count++;
if (count % Integer.parseInt(batchSize) == 0) {
ps.executeBatch();
}
}
dealBatch();
// 循环结束提交数据
log.info("数据库入库的数据" + count);
}
测试结果