【发布时间】:2015-09-16 14:48:06
【问题描述】:
我有一台 PC,我们称之为 PC-A (WIndows 8.1),它运行 Postgres 9.4。我也有一个 java 应用程序,它需要访问数据库, 当我在同一台 PC-A 上运行我的 Java 应用程序时,然后从 localhost 运行,一切正常。
当我在另一台 PC 上运行我的 Java 应用程序时,我们称它为 PC-B (WIndows 8.1),因此它尝试连接到 PC-A 上的数据库,我收到以下错误(我将其翻译成英文,如下意大利语原文):
Postgresql : Connection refused. Check that the hostname and port are correct and that the postmaster is running with option -i, that enables the TCP/IP connections
org.postgresql.util.PSQLException: Connessione rifiutata. Controllare
che il nome dell'host e la porta siano corretti, e che il server (postmaster) sia in esecuzione con l'opzione -i, che abilita le
connessioni attraverso la rete TCP/IP.
at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:122)
at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:66)
at org.postgresql.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:125)
at org.postgresql.jdbc3.AbstractJdbc3Connection.<init>(AbstractJdbc3Connection.java:30)
at org.postgresql.jdbc3.Jdbc3Connection.<init>(Jdbc3Connection.java:24)
at org.postgresql.Driver.makeConnection(Driver.java:382)
at org.postgresql.Driver.connect(Driver.java:260)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:247)
at Database.Registrar.getconnection(Registrar.java:56)
at Database.Registrar.readParametersFromTable(Registrar.java:844)
at Managers.FunctionsAndParameters.writeParametersInMyConfiguration(FunctionsAndParameters.java:405)
Caused by: java.net.ConnectException: Connection timed out: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:345)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at java.net.Socket.connect(Socket.java:538)
at java.net.Socket.<init>(Socket.java:434)
at java.net.Socket.<init>(Socket.java:211)
at org.postgresql.core.PGStream.<init>(PGStream.java:59)
at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:77)
... 12 more
在网上寻找类似的问题我尝试了一些建议的解决方案,但没有成功:
我编辑了文件“pg_hpa.conf”添加:
host all all 192.168.1.0/24 trust # it should enable all addresses: 192.168.1.*
host all all 192.168.1.6/32 trust # it should enable the address of PC-A
我编辑了文件“pgpostgressql.conf”添加:
listen_addresses = '192.168.1.6' # it should enable the address of PC-A
listen_addresses = '0.0.0.0' # it should enable all addresses
它也已经存在了:
listen_addresses = '*' # it should enable all addresses
我在 PC-B 上的 Java 应用尝试使用以下代码连接到数据库:
String driver = "org.postgresql.Driver";
Class.forName(driver);
connection = DriverManager.getConnection(jdbc:postgresql://192.168.1.6:5432/myDBname, "username" , "password" );
地点:
用户名和密码与我从 localhost 连接时使用的相同(在这种情况下它有效)
192.168.1.6 是 PC-A 的 IP 地址(正在运行 Postgres)
5432 是端口,与我从 localhost 连接时使用的端口相同(在这种情况下它可以工作)
myDBname 是数据库名称
当我在本地主机上运行 java 应用程序时,然后在同一台 PC-A 中,我使用相同的代码,而不是“192.168.1.6”,而是“127.0.0.1”
使用 pgAdmin III,我的数据库位于 1 个服务器下:
- mynameserver (192.168.1.6:5432)
请帮帮我!!!
更新:已解决!!!我禁用了 Windows 防火墙,现在它可以工作了!!!
【问题讨论】:
标签: java postgresql