智能家居数据中心第三天

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);
	}

测试结果

测试结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值