Skip to main content

在 Java 应用程序中使用 RisingWave

由于 RisingWave 与 PostgreSQL 兼容,您可以使用第三方 PostgreSQL 驱动程序从 Java 应用程序与 RisingWave 交互。

在本指南中,我们使用 PostgreSQL JDBC 驱动程序连接 RisingWave。

运行 RisingWave

要了解如何运行 RisingWave,请参阅运行 RisingWave

此阶段无需连接到 RisingWave。

下载 PostgreSQL JDBC 驱动程序

根据环境中的 Java 版本,从 PostgreSQL JDBC 网站下载正确版本的 PostgreSQL JDBC 驱动程序。确保将 JDBC 驱动程序添加到 Java 项目中。

连接到 RisingWave

要使用 JDBC 驱动程序连接到 RisingWave,可通过向 DriverManager.getConnection 传递连接 URL 或 Properties 对象参数来指定连接参数。

import java.sql.*;
import java.util.Properties;

public class RisingWaveConnect {

public static void main (String arg[]) throws SQLException{
String url = "jdbc:postgresql://localhost:4566/dev";
Properties props = new Properties();
props.setProperty("user", "root");
props.setProperty("password", "secret");
props.setProperty("ssl", "false");
Connection conn = DriverManager.getConnection(url, props);

//如有需要,可在此处添加用于发出查询的代码。
conn.close();
}
}

创建 source

下面的代码可使用 datagen 连接器创建一个 source walkdatagen 连接器可用于生成模拟数据。walk source 由 distanceduration 两列组成,分别表示步行的距离和持续时间。该 source 是智能手表所跟踪数据的简化版本。

import java.sql.*;
import java.util.Properties;

public class source {

public static void main (String arg[]) throws SQLException {

//如有必要,可在此处添加连接 RisingWave 的代码。

String sqlQuery = "CREATE TABLE walk (distance INT, duration INT) WITH " +
"(connector = 'datagen'," +
"fields.distance.kind = 'sequence'," +
"fields.distance.start = '1'," +
"fields.distance.end = '60'," +
"fields.duration.kind = 'sequence'," +
"fields.duration.start = '1'," +
"fields.duration.end = '30'," +
"datagen.rows.per.second='15'," +
"datagen.split.num = '1') " +
"FORMAT PLAIN ENCODE JSON";
PreparedStatement st = conn.prepareStatement(sqlQuery); //定义查询并将其传递给 PreparedStatement 对象。
st.executeQuery(); //执行查询。
conn.close(); //关闭连接。
}
}

创建物化视图

本节的代码可创建一个物化视图 counter,获取最新的总距离和持续时间。

import java.sql.*;
import java.util.Properties;

public class create_mv {

public static void main (String arg[]) throws SQLException {

//如有必要,可在此处添加连接到 RisingWave 的代码。

String sqlQuery = "CREATE MATERIALIZED VIEW counter AS " +
"SELECT sum(distance) AS total_distance, sum(duration) AS total_duration " +
"FROM walk; ";
PreparedStatement st = conn.prepareStatement(sqlQuery);
st.executeQuery();
conn.close();
}
}

查询物化视图

本节的代码可查询物化视图 counter,获取实时数据。

import java.sql.*;
import java.util.Properties;

public class retrieve {

public static void main (String arg[]) throws SQLException {

//如有必要,可在此处添加连接到 RisingWave 的代码。

PreparedStatement showMV = conn.prepareStatement("SELECT * FROM counter;");
ResultSet rs = showMV.executeQuery();
while (rs.next()) {
System.out.println("Total distance: " + rs.getString("total_distance"));
System.out.println("Total duration: " + rs.getString("total_duration"));
}
}
}