Java PGJDBC:无法从客户端接收数据:

Java PGJDBC:无法从客户端接收数据:,java,postgresql,events,pg-jdbc,Java,Postgresql,Events,Pg Jdbc,亲爱的飞越者: 我在Postgres9.6(Windows10)上尝试事件驱动的侦听器/通知 我遵循了SteveTaylor在上给出的PGJDBC示例 我从下载pgjdbc-ng-0.7-complete.jar开始,并将其放在我的类路径中,以替换标准JDBC驱动程序 当我试图使用pgjdbc驱动程序连接到Postgres数据库时,我收到一个错误: 接收到的连接:主机=127.0.0.1端口=50325 授权连接:user=postgres数据库=scott 无法从客户端接收数据:远程主机强制关

亲爱的飞越者:

我在Postgres9.6(Windows10)上尝试事件驱动的侦听器/通知

我遵循了SteveTaylor在上给出的PGJDBC示例

我从下载pgjdbc-ng-0.7-complete.jar开始,并将其放在我的类路径中,以替换标准JDBC驱动程序

当我试图使用pgjdbc驱动程序连接到Postgres数据库时,我收到一个错误:

接收到的连接:主机=127.0.0.1端口=50325

授权连接:user=postgres数据库=scott

无法从客户端接收数据:远程主机强制关闭了现有连接

以下是我的系统变量:

DBHost:localhost

域名:斯科特

数据库端口:5432

DBUserName:postgres

密码:postgres

我还没过第一关,剩下的看起来像珠穆朗玛峰。请帮帮我。如果你需要代码,我也会遵循Steve的代码

根据约瑟夫·拉森的回答,数据库一直在运行。我已经成功地从PGADMIN和Java连接到Postgres数据库。我认为问题在于连接字符串。从Java开始,当我使用Postgres提供的标准JDBC时,我使用的是像JDBC:p这样的URLostgresql://localhost:5432/dbname 但PGJDBC建议使用不同的连接字符串,如JDBC:PGSQL://localhost:5432/dbname。我试着用那根绳子(强行)连接,但它不起作用。PGJDBC PGDataSource中没有直接提供URL的方法。我必须经历:

setHost(DBHost)

设置端口(5432)

setDatabase(DBName)

setUser(DBUserName)

setPassword(DBPassword)

我不知道它发送到数据库的URL是什么。请给我建议一个连接字符串,这个问题就解决了

谢谢

非常感谢您让我发布错误消息:

Exception in thread "main" java.lang.NullPointerException                                                
        at com.impossibl.postgres.system.BasicContext.loadLocale(BasicContext.java:294)                  
        at com.impossibl.postgres.system.BasicContext.init(BasicContext.java:273)                        
        at com.impossibl.postgres.jdbc.PGConnectionImpl.init(PGConnectionImpl.java:251)                  
        at com.impossibl.postgres.jdbc.ConnectionUtil.createConnection(ConnectionUtil.java:182)          
        at com.impossibl.postgres.jdbc.AbstractDataSource.createConnection(AbstractDataSource.java:723)  
        at com.impossibl.postgres.jdbc.PGDataSource.getConnection(PGDataSource.java:66)                  
        at com.impossibl.postgres.jdbc.PGDataSource.getConnection(PGDataSource.java:58)                  
        at PGListenNotify.<init>(PGListenNotify.java:26)                                                 
        at PGListenNotify.main(PGListenNotify.java:37)          

你真的启动了数据库服务器吗?我不知道PostgreSQL server可以在Windows上运行,但我从未尝试过

我会把你的问题简化一点。我对Windows上的psql一无所知,但在Mac上,我会启动服务器,然后使用psql命令(它是PostgreSQL的一部分)确保服务器已启动并运行

如果要连接,那么问题可能是:

-根本没有服务器 -服务器未在您尝试的端口上运行 -服务器未侦听主机127.0.0.1上的连接,但可能正在侦听计算机的实际IP地址 -我不确定那个特定的错误,但用户名、密码或数据库可能不存在

我会使用psql来找出哪些可能的原因才是真正的问题。这将您的程序隔离为问题的一部分,并且它完全成为管理数据库服务器的一部分。

这看起来像是in
pgjbdc ng
。已解决此问题,请尝试最新版本
0.8.1

最新版本提供了与异步通知相关的详细文档


如果它仍然无法在您的Windows系统上执行,请创建一个问题。

您可以用
pgjdbc ng
标记此帖子以将其与“ng”驱动程序关联。您可以发布您收到的此错误的stacktrace吗?@kdubb感谢您让我发布错误消息。
import java.sql.SQLException;
import java.sql.Statement;

import com.impossibl.postgres.api.jdbc.PGConnection;
import com.impossibl.postgres.jdbc.PGDataSource;

public class PGListenNotify
{
PGConnection connection;

public PGListenNotify()
{
String DBHost = System.getenv("DBHost");
String DBName = System.getenv("DBName");
String DBUserName = System.getenv("DBUserName");
String DBPassword = System.getenv("DBPassword");
try
{
PGDataSource dataSource = new PGDataSource();
dataSource.setHost(DBHost);
dataSource.setPort(5432);
dataSource.setDatabase(DBName);
dataSource.setUser(DBUserName);
dataSource.setPassword(DBPassword);

connection = (PGConnection) dataSource.getConnection();
Statement statement = connection.createStatement();
}
catch (SQLException e)
{
e.printStackTrace();
}
}

public static void main(String[] args)
{
PGListenNotify ln = new PGListenNotify();
}
}