任务描述:
把已有物联网数据库稍加修改搬迁到自己数据库,用timescale DB(时序数据库)来存储。
思路:
用java的 jdbc来操作数据库。查询读出数据+创建新数据表+把数据写入新表。
环境介绍:
- java IDE——Ideal 2020
- 管理数据库工具——Navicat 15
ideal本身的数据库管理工具也挺好用,以后可以写一篇
步骤:
1.加载mysql驱动 Class.forName("com.mysql.jdbc.Driver")
2.连接数据库,注意配置时区 DriverManager.getConnection(url,user,password)
3.创建执行环境 Connection conn_mgr.createStatement();
4.执行sql语句 statement_data.executeQuery(sql)
4.1创建表
4.2把表设置为timescaledb表
4.3先构造id对应表(id_match),插入一遍就好,第二遍会有主键冲突,抛出异常
4.4主要操作,向timescale新表里插入数据
代码:
package com.cwl.JDBC;
import java.sql.*;
import java.util.concurrent.*;
public class JDBC {
// 建表sql
static String create_id_match="CREATE TABLE id_match\n" +
"(new_devId VARCHAR(35) NOT NULL,\n" +
"old_devId VARCHAR(35) NOT NULL,\n" +
"primary key(new_devId,old_devId)\n" +
");";
static String create_water_0011801="CREATE TABLE hourdata_0011801\n" +
"(new_devId VARCHAR,\n" +
"read_time TIMESTAMPTZ,\n" +
"real_value NUMERIC,\n" +
"dev_source int,\n" +
"in_range int,\n" +
"in_cycle int ,\n" +
"Vorigin NUMERIC,\n"+
"primary key(new_devId,read_time)\n" +
");";
static String create_electricity_00118A0="CREATE TABLE hourdata_00118A0\n" +
"(new_devId VARCHAR,\n" +
"read_time TIMESTAMPTZ,\n" +
"real_value NUMERIC,\n" +
"dev_source int,\n" +
"in_range int,\n" +
"in_cycle int ,\n" +
"Vorigin NUMERIC,\n"+
"primary key(new_devId,read_time)\n" +
");";
public static void main(String[] args) throws Exception {
// 1.加载mysql驱动 Class.forName("com.mysql.jdbc.Driver")
Class.forName("com.mysql.cj.jdbc.Driver");
Class.forName("org.postgresql.Driver");
System.out