java - PGJDBC : could not receive data from client:

标签 java postgresql events pg-jdbc

亲爱的 StackOverFlowers,

我在 Postgres 9.6 (Windows 10) 上尝试事件驱动的 LISTENER/NOTIFY。

我遵循了 Steve Taylor 在 https://www.openmakesoftware.com/postgresql-listen-notify-events-example/ 给出的 PGJDBC 示例.

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

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

收到连接:host=127.0.0.1 port=50325

授权连接:user=postgres database=scott

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

这是我的系统变量:

数据库主机:本地主机

数据库名称:斯科特

数据库端口:5432

数据库用户名:postgres

数据库密码:postgres

我没有跨过第一道障碍,休息看起来像珠穆朗玛峰。请帮我。如果您需要代码,我会遵循 Steve 的代码。

根据 Joseph Larson 的回答,数据库始终处于运行状态。我已成功从 PGADMIN 和 Java 连接到 Postgres 数据库。我认为问题出在连接字符串上。在 Java 中,当我使用 Postgres 提供的标准 JDBC 时,我使用的 URL 如 jdbc:postgresql://localhost:5432/dbname 但 PGJDBC 建议使用不同的连接字符串,如 JDBC:PGSQL://localhost:5432/dbname。我试图(强行)连接那个字符串,它没有用。 PGJDBC PGDataSource 中没有直接提供 URL 的方法。我必须经历:

dataSource.setHost(DBHost);

数据源.setPort(5432);

dataSource.setDatabase(DBName);

dataSource.setUser(DBUserName);

dataSource.setPassword(数据库密码);

它发送到数据库的 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();
}
}                             

最佳答案

这看起来像 Windows locale bugpgjbdc-ng 中。已经解决,试试最新版本0.8.1

最新版本有与异步通知相关的详细文档 here .

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

关于java - PGJDBC : could not receive data from client:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51897215/

相关文章:

javascript - 如何在JS代码中订阅dijit事件?

c++ - 如何从句柄中获取事件的名称

postgresql - 基于项目事件日期范围和最高优先级查询线性时间线结果,有助于改进现有查询

postgresql - Perl PostgreSQL 查询执行两次

java - 如何通过 Exception getCause() 循环查找带有详细消息的根本原因

java - 如何在不设置任何环境变量的情况下运行 `ant` 构建脚本?

mysql - 如何将尽可能多的值插入到另一个表中,因为它是在其他表的特定列中定义的

c# - 使用 nunit 模拟测试事件处理

javax.servlet.ServletContext 正在从 Spring Boot 应用程序中的多个依赖项加载

java - Hibernate:使用复杂对象的集合会引发异常