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



亲爱的StackOverFlowers,

我正在 Postgres 9.6 (Windows 10( 上尝试事件驱动的侦听器/通知。

我遵循了史蒂夫·泰勒(Steve Taylor(在 https://www.openmakesoftware.com/postgresql-listen-notify-events-example/举的PGJDBC的例子。

我首先下载了 pgjdbc-ng-0.7-complete.jar并将其放在我的 CLASSPATH 中,替换了标准的 JDBC 驱动程序。

当我尝试使用 pgjdbc 驱动程序连接到 Postgres 数据库时,出现错误:

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

连接已授权:用户=Postgres 数据库=SCOTT

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

这是我的系统变量:

DBHost:本地主机

DBName: scott

数据库编号: 5432

DBUserName: postgres

DBPassword: postgres

我没有跨过第一个障碍,休息看起来像珠穆朗玛峰。请帮助我。如果您需要代码,我正在遵循史蒂夫的代码。

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

dataSource.setHost(DBHost(;

数据源.setPort(5432(;

dataSource.setDatabase(DBName(;

dataSource.setUser(DBUserName(;

dataSource.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)          

以下是源代码:

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();
}
}                             

这看起来像pgjbdc-ng中的Windows语言环境错误。已解决,请尝试最新版本0.8.1

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

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

您实际上是否启动了数据库服务器?我不知道PostgreSQL服务器可以在Windows上运行,但我从未尝试过。

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新