我如何使用pg服务器访问h2db?

问题描述 投票:0回答:1

我想使用pg服务器访问h2db,因为我想使用c语言中的odbc访问db。 所以我现在正在使用 java 测试使用 pg 服务器对 db 的访问。

import java.sql.*;

public class Main {
    public static void main(String[] a) {
        try {
            Class.forName("org.h2.Driver");
            Connection conn = DriverManager.getConnection("jdbc:h2:tcp://localhost:5435/~/db_test;CIPHER=AES;", "sa", "0df ");
            System.out.println("success");
            conn.close();
        } catch (Exception e) {
            System.out.println(e);
        }
    }
}

打印错误: org.h2.jdbc.JdbcSQLNonTransientConnectionException:连接已损坏:“意外状态 1375731712”[90067-214]

这个问题有解决办法吗?

我尝试将其连接到tcp服务器,然后成功了。但不是pg

database odbc h2
1个回答
0
投票

首先,如果数据库尚不存在,则需要创建它。您可以使用 JDBC 或任何其他方式。对于加密数据库,数据库文件的密码和数据库用户的密码必须一起指定,并用空格字符分隔:

DriverManager.getConnection("jdbc:h2:~/db_test;CIPHER=AES", "sa",
        "file_password user_password")
    .close();

您无法通过 PG 协议传递 H2 特定的路径和设置,因此您需要在启动 H2 的 PG 服务器时使用

-key
选项为您的数据库创建一个别名:

Server.createPgServer("-pgPort", "5435",
        "-key", "db_test", "~/db_test;CIPHER=AES")
    .start();

您的客户端应用程序的类路径中必须有 PostgreSQL JDBC Driver,使用此驱动程序而不是 H2 自己的驱动程序来建立连接:

Connection conn = DriverManager.getConnection(
        "jdbc:postgresql://localhost:5435/db_test",
        "sa", "file_password user_password");
© www.soinside.com 2019 - 2024. All rights reserved.