我有一台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
在网上寻找类似的问题我尝试了一些建议的解决方案,但没有成功:
我编辑了文件&#34; pg_hpa.conf&#34;中加入:
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
我编辑了文件&#34; pgpostgressql.conf&#34;中加入:
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" );
其中:
用户名e密码与我从localhost连接时使用的相同(在这种情况下可以使用)
192.168.1.6是PC-A的IP地址(运行Postgres的地方)
5432是端口,与我从localhost连接时使用的相同(在这种情况下可以使用)
myDBname是数据库名称
当我在localhost上运行java应用程序,然后在同一台PC-A中,我使用相同的代码而不是&#34; 192.168.1.6&#34;有&#34; 127.0.0.1&#34;
使用pgAdmin III,我的数据库位于1 Server:
请帮助我!!!
更新:解决了!!!我禁用了Windows防火墙,现在它可以工作!!!
答案 0 :(得分:3)
您可以检查双方的防火墙配置,并尝试从PC-B ping PC-A,以查看两台主机之间是否存在连接问题。
请注意&#34;连接被拒绝&#34;与&#34;连接超时&#34;。
不是同一个问题在postgresql.conf中你应该只有一个&#34; listen_addresses&#34;参数和&#34; *&#34;与&#34; 0.0.0.0&#34;。
相同