我已经设置了一个新的 H2 测试数据库,并且在本地访问它没有问题。
我使用这个网站来帮助https://www.tutorialspoint.com/h2_database/h2_database_jdbc_connection.htm
我将代码放在亚马逊网络服务器上,可以确认它确实在运行,并且可以再次在本地向其添加数据并通过代码和 H2 控制台访问它。甚至可以从我的远程 PC 访问 H2 控制台。
现在在我的 PC 上,我试图通过 JDBC 访问服务器,但不能。服务器甚至设置为 TCP 服务器。 在属性文件中
spring.datasource.url=jdbc.h2.mem.test
在 application.java 文件中,在 try-catch 中,它报告服务器确实启动了。
Server.createTcp.Server().start();
数据库中有一个名为 testable 的表,其中包含服务器列和测试行。再次在本地,甚至在 H2 控制台中,我都可以毫无问题地获取数据。
我尝试了多种方法在 Java 代码中列出 URL 以通过 JDBC 访问服务器。
这是我可以访问托管在那里的网站以及 H2 控制台的虚假 URL。 https://www.mywebsitehostedonamazon.com/h2
我已将此添加到我的代码中以连接 URL。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class H2jdbcCreateDemo {
// JDBC driver name and database URL
static final String JDBC_DRIVER = "org.h2.Driver";
static final String DB_URL = "jdbc:h2:tcp://https://www.mywebsitehostedonamazon.com:8082/test";
// Database credentials
static final String USER = "sa";
static final String PASS = "password";
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
try {
// STEP 1: Register JDBC driver
Class.forName(JDBC_DRIVER);
//STEP 2: Open a connection
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL,USER,PASS);
//STEP 3: Execute a query
System.out.println("Creating table in given database...");
stmt = conn.createStatement();
String sql = "SELECT * FROM testable LIMIT 1";
stmt.executeUpdate(sql);
System.out.println("Created table in given database...");
// STEP 4: Clean-up environment
stmt.close();
conn.close();
} catch(SQLException se) {
//Handle errors for JDBC
se.printStackTrace();
} catch(Exception e) {
//Handle errors for Class.forName
e.printStackTrace();
} finally {
//finally block used to close resources
try{
if(stmt!=null) stmt.close();
} catch(SQLException se2) {
} // nothing we can do
try {
if(conn!=null) conn.close();
} catch(SQLException se){
se.printStackTrace();
} //end finally try
} //end try
System.out.println("Goodbye!");
}
}
当我运行这个时,我收到了一个零长度字符串错误 conn = DriverManager.getConnection(DB_URL,USER,PASS);
如果我更改 URL,则会出现连接超时。 jdbc:h2:tcp://www.mywebsitehostedonamazon.com:8082/test
如果我更改 URL,则会出现连接超时。 jdbc:h2:tcp://www.mywebsitehostedonamazon.com:8082/mem:test
如果我更改 URL,则会收到一个错误,指出找不到“可测试的”表。 jdbc:h2:mem://www.mywebsitehostedonamazon.com:8082/mem:test
有人可以帮忙吗?