PGJDBC:无法从客户端接收数据:
PGJDBC: could not receive data from client:
亲爱的 Whosebugers,
我在 Postgres 9.6 (Windows 10) 上尝试事件驱动 LISTENER/NOTIFY。
我遵循了史蒂夫·泰勒在 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
无法从客户端接收数据:现有连接被远程主机强行关闭。
这是我的系统变量:
数据库主机:本地主机
数据库名称:斯科特
数据库端口:5432
数据库用户名:postgres
数据库密码:postgres
第一关我过不去,休息就像珠穆朗玛峰。请帮我。如果您需要代码,我会遵循 Steve 的代码。
根据 Joseph Larson 的回答,数据库总是 运行。我已从 PGADMIN 连接到 Postgres 数据库并成功 Java。我认为问题出在连接字符串上。从Java开始,当我使用Postgres提供的标准JDBC时,我正在使用URL,比如jdbc:postgresql://localhost:5432/dbname,但是PGJDBC建议使用不同的连接字符串,例如 JDBC:PGSQL://localhost:5432/dbname。我试图(强行)连接那个字符串,它没有用。 PGJDBC PGDataSource 中没有直接提供 URL 的方法。我必须经历:
dataSource.setHost(DBHost);
dataSource.setPort(5432);
dataSource.setDatabase(DBName);
dataSource.setUser(数据库用户名);
dataSource.setPassword(数据库密码);
以及它向数据库发送的内容 URL 我无法弄清楚。请建议我一个连接字符串,这个问题就解决了。
谢谢
非常感谢让我post错误信息:
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();
}
}
你真的启动了数据库服务器吗?我不知道 PostgreSQL 服务器可以 运行 on Windows,但我从未尝试过。
我会稍微简化您的问题。我对 Windows 上的 psql 一无所知,但在 Mac 上,我会启动服务器,然后使用 psql 命令(它是 PostgreSQL 的一部分)来确保服务器已启动并且 运行ning .
如果你要连接,那么问题可能是:
-根本没有服务器
- 服务器未 运行ning 在您尝试的端口上
- 服务器没有监听主机 127.0.0.1 上的连接,但可能监听您机器的实际 IP 地址
-我不确定那个特定错误,但用户名、密码或数据库可能不存在。
我会使用 psql 来找出这些可能的原因中哪些是真正的问题。这将您的程序隔离为问题的一部分,并且它完全成为管理数据库服务器的一部分。
这看起来像 pgjbdc-ng
中的 Windows locale bug。已经解决,试试最新版本0.8.1
.
最新版本有与异步通知相关的详细文档here。
如果它仍然无法在您的 Windows 系统上执行,请创建一个问题 here。
亲爱的 Whosebugers,
我在 Postgres 9.6 (Windows 10) 上尝试事件驱动 LISTENER/NOTIFY。
我遵循了史蒂夫·泰勒在 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
无法从客户端接收数据:现有连接被远程主机强行关闭。
这是我的系统变量:
数据库主机:本地主机
数据库名称:斯科特
数据库端口:5432
数据库用户名:postgres
数据库密码:postgres
第一关我过不去,休息就像珠穆朗玛峰。请帮我。如果您需要代码,我会遵循 Steve 的代码。
根据 Joseph Larson 的回答,数据库总是 运行。我已从 PGADMIN 连接到 Postgres 数据库并成功 Java。我认为问题出在连接字符串上。从Java开始,当我使用Postgres提供的标准JDBC时,我正在使用URL,比如jdbc:postgresql://localhost:5432/dbname,但是PGJDBC建议使用不同的连接字符串,例如 JDBC:PGSQL://localhost:5432/dbname。我试图(强行)连接那个字符串,它没有用。 PGJDBC PGDataSource 中没有直接提供 URL 的方法。我必须经历:
dataSource.setHost(DBHost);
dataSource.setPort(5432);
dataSource.setDatabase(DBName);
dataSource.setUser(数据库用户名);
dataSource.setPassword(数据库密码);
以及它向数据库发送的内容 URL 我无法弄清楚。请建议我一个连接字符串,这个问题就解决了。
谢谢
非常感谢让我post错误信息:
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();
}
}
你真的启动了数据库服务器吗?我不知道 PostgreSQL 服务器可以 运行 on Windows,但我从未尝试过。
我会稍微简化您的问题。我对 Windows 上的 psql 一无所知,但在 Mac 上,我会启动服务器,然后使用 psql 命令(它是 PostgreSQL 的一部分)来确保服务器已启动并且 运行ning .
如果你要连接,那么问题可能是:
-根本没有服务器 - 服务器未 运行ning 在您尝试的端口上 - 服务器没有监听主机 127.0.0.1 上的连接,但可能监听您机器的实际 IP 地址 -我不确定那个特定错误,但用户名、密码或数据库可能不存在。
我会使用 psql 来找出这些可能的原因中哪些是真正的问题。这将您的程序隔离为问题的一部分,并且它完全成为管理数据库服务器的一部分。
这看起来像 pgjbdc-ng
中的 Windows locale bug。已经解决,试试最新版本0.8.1
.
最新版本有与异步通知相关的详细文档here。
如果它仍然无法在您的 Windows 系统上执行,请创建一个问题 here。