Java 访问PI 数据库:(3)PI的基本SQL语句

从PI 获取数据

目前从PI 获取的数据

历史时间点的

  • 获取快照值
SELECT tag, time, value, svalue, status FROM piarchive..picomp WHERE time = '*'select tag,time,value,status from piarchive..pisnapshot
  • 获取历史时间点值
    SELECT TOP 1 *
            FROM piarchive..picomp2         
            WHERE tag = 'cdm158' AND time <= '2017/9/21 22:56:00'
            ORDER BY tag, time DESC '*'
  • 获取历史时间点值(最近)
select * from piarchive..picomp2
where tag = 'cdm158' AND time = 
(
SELECT CASE WHEN (mytime - prevtime) < (nexttime - mytime) THEN prevtime ELSE nexttime END
FROM
(
    SELECT mytime,
        (
            SELECT TOP 1 time
            FROM piarchive..picomp2         
            WHERE tag = p.mytag AND time <= p.mytime
            ORDER BY tag, time DESC
        ) prevtime,
        (
            SELECT TOP 1 time
            FROM piarchive..picomp2
            WHERE tag = p.mytag AND time >= p.mytime
            ORDER BY tag, time ASC
        ) nexttime
    FROM
    (
        SELECT 'cdm158' mytag, DATE('2017/9/21 22:56:00') mytime
    ) p
) t
)
  • 获取当前时间
SELECT DATE(N'*') Time
--2017/9/22 11:25:34
  • 获取当前时间前一个小时
SELECT DATE(N'*-1h') Time
--2017/9/22 10:25:11
  • 获取当前日期 昨日0点
SELECT DATE(N'y') Time
--2017/9/21 0:00:00
  • 获取当前日期 今日0点
SELECT DATE(N't') Time
--2017/9/22 0:00:00
  • 获取指定日期
SELECT DATE(N'2017-09-23 00:01:12') Time
--2017/9/23 0:01:12

SELECT DATE(N'01-Jan-2010') Time
--2010/1/1 0:00:00
  • 格式化日期
select FORMAT('2017/9/21 22:56:00','yyyy-MM-dd hh:mm:ss') Time
--2017-09-21 10:56:00
Java可以使用JDBC(Java Database Connectivity)来读取pi数据库中的测点值。 首先,需要导入相关的JDBC驱动程序。例如,对于PI数据库,可以使用PI JDBC驱动程序。可以从OSIsoft的官方网站下载并安装该驱动程序。 接下来,需要连接到PI数据库。可以使用JDBC的APIPI JDBC驱动程序提供的连接字符串来建立连接。连接字符串包含数据库的URL、用户名和密码等信息。例如: ```java String url = "jdbc:pisql://localhost/pi"; String user = "yourUsername"; String password = "yourPassword"; Connection connection = DriverManager.getConnection(url, user, password); ``` 连接成功后,可以执行SQL查询来读取pi数据库中的测点值。例如,可以使用SELECT语句来选择特定的测点和时间范围,并获取相应的值。例如: ```java String sql = "SELECT value, time FROM yourTableName WHERE tag = 'yourTagName' AND time >= ? AND time <= ?"; PreparedStatement statement = connection.prepareStatement(sql); statement.setTimestamp(1, startTime); // 设置起始时间 statement.setTimestamp(2, endTime); // 设置结束时间 ResultSet resultSet = statement.executeQuery(); while (resultSet.next()) { double value = resultSet.getDouble("value"); Timestamp time = resultSet.getTimestamp("time"); System.out.println("Value: " + value + ", Time: " + time); } ``` 在查询结果中,可以通过调用`resultSet.getDouble("value")`获取测点的值,通过调用`resultSet.getTimestamp("time")`获取测点的时间。 最后,记得关闭连接和释放资源。 ```java resultSet.close(); statement.close(); connection.close(); ``` 以上是使用Java读取PI数据库中测点值的大致流程。具体的实现会根据使用的JDBC驱动程序和数据库的具体要求而有所不同。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值