日期:2014-05-20  浏览次数:20970 次

如何远程访问H2数据库的内存模式
简单来说就是用jdbc:h2:mem:h2db来建立内存模式,并建表,
然后jdbc:h2:tcp://192.168.20.141:8082/mem:h2db来访问上面的内存数据库,但是报错说表不存在。


package test;  
  
import java.sql.Connection;  
import java.sql.DriverManager;  
import java.sql.ResultSet;  
import java.sql.SQLException;  
import java.sql.Statement;
import org.h2.tools.Server;  
  
public class H2Demo {  
  private Server server;  


  private String port = "8082";  
  private static String sourceURL1 = "jdbc:h2:mem:h2db"; 
  private static String sourceURL2 = "jdbc:h2:tcp://192.168.20.141:8082/mem:h2db"; 

  private String user = "shorturl";  
  private String password = "123456";  
  
  public void startServer() {  
  try {  
  System.out.println("正在启动h2...");  
  server = Server.createTcpServer(  
  new String[] { "-tcpPort", port }).start();  
  } catch (SQLException e) {  
  System.out.println("启动h2出错:" + e.toString());  
  // TODO Auto-generated catch block  
  e.printStackTrace();  
  throw new RuntimeException(e);  
  }  
  }  
  
  public void stopServer() {  
  if (server != null) {  
  System.out.println("正在关闭h2...");  
  server.stop();  
  System.out.println("关闭成功.");  
  }  
  }  
  
  public void useH2() {  
  try {  
  Class.forName("org.h2.Driver");
  Connection conn = DriverManager.getConnection(sourceURL1,user, password);  
  Statement stat = conn.createStatement();  
  // insert data  
  stat.execute("CREATE MEMORY Table TEST(NAME VARCHAR)");  
  stat.execute("INSERT INTO TEST VALUES('Hello World')");
  //stat.execute("delete mappedURL");  
  
  // use data  
  ResultSet result = stat.executeQuery("select name from test "); 
  int i = 1;  
  while (result.next()) {  
  System.out.println(i++ + ":" + result.getString("name"));  
  }  
  result.close();  
  stat.close();  
  conn.close();  
  } catch (Exception e) {  
  // TODO Auto-generated catch block  
  e.printStackTrace();  
  }  
  }  
  
  public void useH2i() {  
  try {  
  Class.forName("org.h2.Driver");  
  //Connection conn = DriverManager.getConnection("jdbc:h2:" + dbDir+";AUTO_SERVER=TRUE;MVCC=TRUE",user, password);  
  Connection conn = DriverManager.getConnection(sourceURL2,user, password);  
  Statement stat = conn.createStatement();  
  // use data  
  ResultSet result = stat.executeQuery("select name from test");