无法从远程机器访问 H2 服务器

时间:2021-03-04 17:17:45

标签: java database h2

我已经设置了一个新的 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

有人可以帮忙吗?

0 个答案:

没有答案
相关问题