java 连接 h2_使用Java应用程序远程连接到H2数据库

Java (5) 2024-06-01 21:23

Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说java 连接 h2_使用Java应用程序远程连接到H2数据库,希望能够帮助你!!!。

我遇到以下问题:

当我尝试使用我的外部IP地址创建TCP服务器(PC的IP而不是我的本地IP =我们在cmd.exe中运行ipconfig后看到的输出)时发生以下错误:

服务器出错:异常打开端口“9092”(端口可能正在使用中),原因:“java.net.BindException:无法分配请求的地址:JVM_Bind”[90061-169]

但是,端口未使用.我已经使用netstat -a -n检查过了.

我启用了外部IP,并且已从路由器禁用了防火墙.我的外部IP现在可以被ping.

请帮我.

更新:这是启动tcp服务器的代码.

package businessApp;

import org.h2.tools.Server; //imports the server utility

public class startTcpServerForH2 {

Server server; //the server's instance variable

private static final String SERVER_IP = "192.168.1.101"; //fixed IP of the server

private static final String SERVER_PORT = "9092"; //fixed port the server is listening to

public void tcpServer() { //method responsible to create the tcp server

optionPane optPane = new optionPane(); //option pane for debugging purposes, shows the server's status

try { //catches any server related errors, if the connection is broken etc.

//server uses the IP and port defined earlier, allows other computers in the LAN to connect and implements the secure socket layer (SSL) feature

server = Server.createTcpServer( //create tcp server

new String[] { "-tcpPort" , SERVER_PORT , "-tcpAllowOthers" , "-tcpSSL" }).start();

System.out.println(server.getStatus()); //prints out the server's status

optPane.checkServerStatus(server.getStatus()); //prints out the server's status on the option pane as well

} catch(Exception ex){

System.out.println("Error with Server: " + ex.getMessage());

}

}

public static void main(String[] args){

startTcpServerForH2 tcpServ = new startTcpServerForH2(); //create a new server object

tcpServ.tcpServer(); //starts the tcp server

}

}

第二次更新:这是h2Connection代码.

包businessApp;

import java.sql.*; //导入sql功能

//负责与H2数据库引擎连接的类

public class h2Connection {

Connection conn; //connection variable

DatabaseMetaData dbmd; /** Metadata variable which include methods such as the following:

* 1) Database Product Name

* 2) Database Product Version

* 3) URL where the database files are located (in TCP mode)

*/

Statement stm; //statements variable

ResultSet rst; //result sets variable

private static final String SERVER_IP = "..."; //here I enter my WAN_IP

private static final String SERVER_PORT = "9092";

public Connection connectionToH2(Connection connt) {

optionPane optPane = new optionPane(); //create new option pane object

String outputConn = null; //declare & initialize string which will hold important messages

try {

Class.forName("org.h2.Driver"); //Driver's name

/** The String URL is pertained of the following:

* 1) jdbc which java implements so that it can take advantage of the SQL features

* 2) Which Database Engine will be used

* 3) URL where the files will be stored (as this is a TCP connection)

* 4) Schema: businessApp

* 5) Auto server is true means that other computers can connect with the same databse at any time

* 6) Port number of the server is also defined

*/

String url = "jdbc:h2:tcp://" + SERVER_IP + ":" + SERVER_PORT + "/C:/Databases/businessApp;IFEXISTS=TRUE";

System.out.println(url); //prints out the url the database files are located as well as the h2 features used (SSL)

connt = DriverManager.getConnection(url, "sa", ""); //Driver Manager defines the username & password of the database

System.out.println(connt.getCatalog()); //prints out the database schema

optPane.checkServerStatus(connt.getCatalog()); //prints out the database schema on the option pane as well

connt.setAutoCommit(false); //set AutoCommit to false to control commit actions manually

//outputs H2 version and the URL of the database files which H2 is reading from, for confirmation

dbmd = connt.getMetaData(); //get MetaData to confirm connection

outputConn = "Connection to "+dbmd.getDatabaseProductName()+" "+

dbmd.getDatabaseProductVersion()+ " with the URL " + dbmd.getURL()+" was successful.\n";

System.out.println(outputConn); //outputs the message on the system (NetBeans compiler)

optPane.checkH2Connection(outputConn); //outputs the message on top of the frame

} catch (ClassNotFoundException ex){ //In case there is an error for creating the class for the Driver to be used

System.out.println("Error creating class: " + ex.getMessage());

} catch(SQLException ex){ //Any error associated with the Database Engine

System.out.println("SQL error: " + ex.getMessage());

optPane.checkServerStatus("SQL error: " + ex.getMessage());

}

return connt; //As the method is not void, a connection variable must be returned

}

}

当我想连接到h2数据库时,我创建一个新的h2Connection对象并使用它来连接.我一字一句地跟着H2手册.你还需要什么?

今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

发表回复