2

我正在尝试在 opensuse 上使用 h2 数据库,但无法使其正常工作。我从官方网站下载了平台无关的包,然后尝试了几件事来运行它,但没有成功:

  • 使 /h2/bin/h2.sh 可执行,然后执行控制台命令 ./h2.sh
  • 使用命令 java -jar h2*.jar
  • 使用 Play!Framework 命令 h2-browser

所有三个都返回相同的错误:

org.h2.jdbc.JdbcSQLException: IO Exception: "java.net.UnknownHostException: linux-t89a.site: linux-t89a.site" [90028-170]
        at org.h2.message.DbException.getJdbcSQLException(DbException.java:329)
        at org.h2.message.DbException.get(DbException.java:158)
        at org.h2.message.DbException.convert(DbException.java:273)
        at org.h2.util.NetUtils.getLocalAddress(NetUtils.java:263)
        at org.h2.server.web.WebServer.updateURL(WebServer.java:325)
        at org.h2.server.web.WebServer.init(WebServer.java:315)
        at org.h2.tools.Server.<init>(Server.java:51)
        at org.h2.tools.Server.createWebServer(Server.java:412)
        at org.h2.tools.Console.runTool(Console.java:228)
        at org.h2.tools.Console.main(Console.java:100)
Caused by: java.net.UnknownHostException: linux-t89a.site: linux-t89a.site
        at java.net.InetAddress.getLocalHost(InetAddress.java:1454)
        at org.h2.util.NetUtils.getLocalAddress(NetUtils.java:261)
        ... 6 more
Exception in thread "main" org.h2.message.DbException: IO Exception: "java.net.UnknownHostException: linux-t89a.site: linux-t89a.site" [90028-170]
        at org.h2.message.DbException.get(DbException.java:158)
        at org.h2.message.DbException.convert(DbException.java:273)
        at org.h2.util.NetUtils.getLocalAddress(NetUtils.java:263)
        at org.h2.server.TcpServer.getURL(TcpServer.java:193)
        at org.h2.tools.Server.getStatus(Server.java:391)
        at org.h2.tools.Console.printProblem(Console.java:300)
        at org.h2.tools.Console.runTool(Console.java:270)
        at org.h2.tools.Console.main(Console.java:100)
Caused by: org.h2.jdbc.JdbcSQLException: IO Exception: "java.net.UnknownHostException: linux-t89a.site: linux-t89a.site" [90028-170]
        at org.h2.message.DbException.getJdbcSQLException(DbException.java:329)
        ... 8 more
Caused by: java.net.UnknownHostException: linux-t89a.site: linux-t89a.site
        at java.net.InetAddress.getLocalHost(InetAddress.java:1454)
        at org.h2.util.NetUtils.getLocalAddress(NetUtils.java:261)
        ... 5 more

这是我的 java -version:

java version "1.7.0_21"
OpenJDK Runtime Environment (IcedTea 2.3.9) (suse-3.37.1-x86_64)
OpenJDK 64-Bit Server VM (build 23.7-b01, mixed mode)

我的 javac 版本:

javac 1.7.0_21

更多信息: 我请朋友尝试在 UnbuntuX 上运行它,使用 java -jar h2*.jar 程序,它工作(我们有相同的 java 版本,省略了 linux 发行版)。我请另一个朋友尝试在他的计算机上使用 Opensuse 运行它,它没有工作,与我的错误相同。

谢谢

编辑:根据需要,etc/hosts 文件的内容:

#
# hosts         This file describes a number of hostname-to-address
#               mappings for the TCP/IP subsystem.  It is mostly
#               used at boot time, when no name servers are running.
#               On small systems, this file can be used instead of a
#               "named" name server.
# Syntax:
#    
# IP-Address  Full-Qualified-Hostname  Short-Hostname
#

127.0.0.1       localhost

# special IPv6 addresses
::1             localhost ipv6-localhost ipv6-loopback

fe00::0         ipv6-localnet

ff00::0         ipv6-mcastprefix
ff02::1         ipv6-allnodes
ff02::2         ipv6-allrouters
ff02::3         ipv6-allhosts
4

2 回答 2

4

我认为问题在于该方法InetAddress.getLocalHost()由于某种原因在您的环境中不起作用。H2 数据库使用这种方法。

这个问题和一个可能的答案在问题InetAddress.getLocalHost() throws UnknownHostException中描述

于 2013-05-17T20:12:28.987 回答
0

我也遇到了这个问题,我的情况是这样的:

  1. 将机器连接到 VPN。这个过程为我的机器分配了一个唯一的主机名。每次我连接到 VPN 时,此主机名都会更改。
  2. 关闭与 VPN 的连接。
  3. 以 tcp 模式启动 H2。

这种情况可以通过调用 InetAddress.getByName("127.0.0.1") 来缓解。我查看了此方法的 JDK 源代码,似乎因为地址是 IP 地址,它跳过了 DNS 查找/loopbackAddress 代码流。

于 2013-08-19T18:05:49.877 回答