在上一篇文章中,我们谈到了 ODBC 和 C# 连接,现在让我们看看 JDBC 和 Java。InterSystems JDBC 驱动程序是集成 Java 应用程序的高性能推荐方式。
以下是使用 JDBC 驱动程序将 Java 应用程序连接到 IRIS 实例的分步指南。
第 1 步:获取并包含 InterSystems IRIS JDBC 驱动程序
JDBC 驱动程序与 ODBC 驱动程序不同,后者通常安装在整个系统中,而 JDBC 驱动程序通常以JAR 文件的形式发布,必须包含在 Java 项目的类路径中。
如果 InterSystems IRIS 安装在本地计算机或您可以访问的其他计算机上,您可以在 install-dir/dev/java/lib/ 或类似位置找到该文件,其中 install-dir 是实例的安装目录。反之,您也可以从驱动程序软件包页面下载 jar 文件。
或者按照 @Dmitry Maslennikov 在评论中的建议 ,使用 Maven 的maven 中央仓库:
<dependency>
<groupId>com.intersystems</groupId>
<artifactId>intersystems-jdbc</artifactId>
<version>3.10.5</version>
</dependency>
或 Gradle:
implementation("com.intersystems:intersystems-jdbc:3.10.5")
在项目中包含 jar 文件:
- Maven/Gradle:如果使用构建工具,最简单的方法是将 InterSystems JDBC 驱动程序作为依赖项添加到
pom.xml或build.gradle文件中。这会自动下载并管理 JAR。 - 手册:对于简单的项目,必须将 JAR 文件放在项目目录(如
/lib)中,并在编译和运行时将其明确添加到 classpath 中。
第 2 步:定义 JDBC 连接
JDBC 连接 URL 明确规定了 Java 应用程序连接数据库的位置和方式。其格式为 jdbc:<subprotocol>://<host>:<port>/<namespace>。
InterSystems IRIS 的格式为
String url = "jdbc:IRIS://127.0.0.1:1972/USER";
String user = "_System";
String password = "SYS";
注意:
- 驱动程序前缀为
jdbc:IRIS。 127.0.0.1是服务器地址(远程连接时更改)。1972是 IRIS超级服务器端口(标准端口通常为 1972 或 51773)。USER是代码和数据所在的 InterSystems IRIS 目标命名空间。- 默认的
user是_System,密码是SYS。请务必在生产环境中更改这些默认值。
第 3 步:用 Java 实现连接
我们将使用标准java.sql包建立连接并执行查询。
下面是一个最小的 Java 示例,它连接到 IRIS,针对默认表执行简单查询,并使用try-with-resources显示结果,以实现可靠的连接管理。
package com.example;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class IrisJdbcConnector {
public static void main(String[] args) {
// 1. Define the connection details
String url = "jdbc:IRIS://127.0.0.1:1972/USER";
String user = "_System";
String password = "SYS";
int maxId = 5; // Parameter for the query
// The try-with-resources block ensures all resources are closed automatically
try (
// 2. Establish the connection
Connection conn = DriverManager.getConnection(url, user, password);
// 3. Define the SQL Query using a placeholder (?)
PreparedStatement pstmt = conn.prepareStatement("SELECT ID, Name, DOB FROM Sample.Person WHERE ID < ?")
) {
System.out.println("Connection to InterSystems IRIS successful!");
// 4. Bind the parameter value
pstmt.setInt(1, maxId);
// 5. Execute the query
try (ResultSet rs = pstmt.executeQuery()) {
System.out.println("--- Query Results ---");
// 6. Iterate through the results
while (rs.next()) {
// Access data by column name
int id = rs.getInt("ID");
String name = rs.getString("Name");
// JDBC automatically handles the mapping of IRIS types to Java types (e.g., Date)
String dob = rs.getDate("DOB").toString();
System.out.println(String.format("ID: %d, Name: %s, DOB: %s", id, name, dob));
}
}
} catch (SQLException e) {
// 7. Handle JDBC-specific exceptions (e.g., connection failure, invalid SQL)
System.err.println("\n--- Database Error ---");
System.err.println("SQL State: " + e.getSQLState());
System.err.println("Error Message: " + e.getMessage());
System.err.println("Ensure the IRIS server is running and the JDBC driver JAR is in the classpath.");
} catch (Exception e) {
System.err.println("\n--- General Error ---");
System.err.println(e.getMessage());
}
}
}
❗与所有数据库连接一样,在生产代码中始终使用预处理语句(类似于参数化查询),以防止 SQL 注入漏洞。