PI数据库开发-java(读写pi中的时序数据和关系数据)

  1. pi数据库分为采集模块(接口机)、DA(数据库)、AF(建模用)、PI Vision(图表用)、PI域控机等。
  2. java开发需要在域内装OLEADB  PROVIDER、OLEAD(SQL DAS)、PI JDBC Driver软件。如图:

     具体网址为:https://customers.osisoft.com/s/knowledgearticle?knowledgeArticleUrl=Playbook-PI-JDBC-Driver                                                                      pi jdbc  driver具体资料:PI JDBC                                            pi  jdbc底层使用的还是pi oledb provider,所以必须了解下pi  oledb provider。网址为:PI OLEDB Provider

  3. 按照软件以后使用pi推荐的DbVisualizer连接工具测试,是否成功:https://customers.osisoft.com/s/knowledgearticle?knowledgeArticleUrl=How-to-setup-DBVisualizer-for-PI-JDBC-Driver

 成功后在项目中增加pi的jar及pom配置:

pom中:

<dependency>
   <groupId>com.osisoft</groupId>
   <artifactId>PIJDBCDriver</artifactId>
   <version>1.7.21114.1</version>
   <scope>system</scope>
   <systemPath>${pom.basedir}/lib/PIJDBCDriver.jar</systemPath>
</dependency>

pom中build增加:

<resources>
   <resource>
      <directory>lib</directory>
      <targetPath>/BOOT-INF/lib/</targetPath>
      <includes>
         <include>**/*.jar</include>
      </includes>
   </resource>
   <resource>
      <directory>src/main/resources</directory>
   </resource>
</resources>

如下图:

 5.项目增加多数据源管理:

  1. jdbc配置:
  2. 代码中增加pi  jdbc的bean:
@Bean(name="piDataSource")
@ConfigurationProperties("spring.datasource.druid.pi")
public DataSource piDataSource(DruidProperties druidProperties)
{
    DruidDataSource dataSource = DruidDataSourceBuilder.create().build();
    dataSource.setDriverClassName("com.osisoft.jdbc.Driver");
    dataSource.addConnectionProperty("TrustedConnection","No");
    dataSource.addConnectionProperty("ProtocolOrder","Https/Soap:5461,NetTcp:5462");
    dataSource.addConnectionProperty("LogConsole","True");
    dataSource.addConnectionProperty("LogLevel","0");
    return druidProperties.dataSource(dataSource);
}

6.使用pi jdbc,使用数据源切换到pi数据库查询数据

7.mapper中使用pi数据库中表的说明:

1)查询实时数据:pisnapshot为快照表,只能查询不能进行其它操作

select tag, time, value from pisnapshot

2)插入或修改数据:picomp2  picomp2个表都可,picomp比较老,建议使用picomp2。
insert into  piarchive..picomp2 (tag,value,time,status) values('zhtest',233,'2021-07-08 11:36:26',0);

update  piarchive..picomp2 set time='2021-07-06 11:36:26',value=233 where tag='zhtest';

 具体表说明见:

PI OLEDB Provider

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
以下是用 Java 编写 pi 数据库与 MySQL 数据库同步的脚本的示例代码: ```java import java.sql.*; public class SyncDB { public static void main(String[] args) { Connection piConn = null; Connection mysqlConn = null; try { //连接 pi 数据库 String piUrl = "jdbc:pi://localhost:1234/mydb"; String piUser = "username"; String piPwd = "password"; piConn = DriverManager.getConnection(piUrl, piUser, piPwd); //连接 MySQL 数据库 String mysqlUrl = "jdbc:mysql://localhost/mydb"; String mysqlUser = "username"; String mysqlPwd = "password"; mysqlConn = DriverManager.getConnection(mysqlUrl, mysqlUser, mysqlPwd); //从 pi 数据库读取数据 Statement piStmt = piConn.createStatement(); ResultSet piRs = piStmt.executeQuery("SELECT * FROM mytable"); //插入或更新数据到 MySQL 数据库 PreparedStatement mysqlPStmt = null; while (piRs.next()) { int id = piRs.getInt("id"); String name = piRs.getString("name"); int age = piRs.getInt("age"); String sql = "INSERT INTO mytable (id, name, age) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE name=?, age=?"; mysqlPStmt = mysqlConn.prepareStatement(sql); mysqlPStmt.setInt(1, id); mysqlPStmt.setString(2, name); mysqlPStmt.setInt(3, age); mysqlPStmt.setString(4, name); mysqlPStmt.setInt(5, age); mysqlPStmt.executeUpdate(); } } catch (SQLException e) { e.printStackTrace(); } finally { //关闭连接 if (piConn != null) { try { piConn.close(); } catch (SQLException e) { e.printStackTrace(); } } if (mysqlConn != null) { try { mysqlConn.close(); } catch (SQLException e) { e.printStackTrace(); } } } } } ``` 该脚本使用 JDBC 连接 pi 数据库和 MySQL 数据库,并使用 SQL 语句从 pi 数据库读取数据,然后将数据插入或更新到 MySQL 数据库。在插入数据时,使用 ON DUPLICATE KEY UPDATE 语句来处理重复的记录。请根据实际情况修改连接字符串、用户名、密码、数据库名称和表名称。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值