【问题标题】:Postgresql 9.3 - JDBC connection errorPostgresql 9.3 - JDBC 连接错误
【发布时间】:2015-11-18 00:27:29
【问题描述】:

我正在尝试在 Windows 7 和 Ubuntu 14.04 之间创建数据库连接。在这种情况下,我在我的 Ubuntu 系统上安装了 Postgresql,并在“postgresql.conf”中将listen_addresses 从“localhost”更改为“*”。接下来,我将 'host all all 192.168.2.1/24 md5' 添加到 'pg_hba.conf' 文件中。

使用此配置,可以使用 pgAdmin 3 连接到数据库。但是如果我尝试连接 jdbc 就不行了。

我正在使用版本 - JDBC:'9.3-1103 JDBC 3',Postgresql:9.3。

起初,我用基本代码构建了一个小测试项目:

    Properties properties = new Properties();
    properties.setProperty("user", "user");
    properties.setProperty("password", "pw");
    properties.setProperty("ssl", "true");

    String url = "jdbc:postgresql://192.168.2.143:5432/testdb";
    String driverJDBC = "org.postgresql.Driver";

    Connection connection = null;
    try {
        Class.forName(driverJDBC);
        connection = DriverManager.getConnection(url, properties);
    } catch (SQLException e) {
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        e.getStackTrace();
    }

    try {
        if (connection != null) {
            Statement st = connection.createStatement();
            ResultSet rs = st.executeQuery("select * from testtable;");

            while (rs.next()) {
                System.out.println(rs.getString(2));
            }
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }

这个小程序产生错误信息:

org.postgresql.util.PSQLException: Der Verbindungsversuch schlug fehl.
            at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:240)
            at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:64)
            at org.postgresql.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:143)
            at org.postgresql.jdbc3.AbstractJdbc3Connection.<init>(AbstractJdbc3Connection.java:29)
            at org.postgresql.jdbc3g.AbstractJdbc3gConnection.<init>(AbstractJdbc3gConnection.java:21)
            at org.postgresql.jdbc3g.Jdbc3gConnection.<init>(Jdbc3gConnection.java:24)
            at org.postgresql.Driver.makeConnection(Driver.java:412)
            at org.postgresql.Driver.connect(Driver.java:280)
            at java.sql.DriverManager.getConnection(Unknown Source)
            at java.sql.DriverManager.getConnection(Unknown Source)
            at db.DBConnection.make(DBConnection.java:23)
            at org.apache.jsp.index_jsp._jspService(index_jsp.java:75)
            at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
            at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:439)
            at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
            at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
            at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
            at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
            at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
            at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
            at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
            at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
            at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:957)
            at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
            at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)
            at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079)
            at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:620)
            at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
            at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
            at java.lang.Thread.run(Unknown Source)

我尝试禁用 windows 防火墙,其他 JDBC 版本 (4)。

也许有人有想法?

附言。希望我的英语没问题;)

【问题讨论】:

  • 您确定 PSQL 服务器正在运行吗?
  • 您是否尝试过从简单的 java 应用程序而不是从 tomcat 进行连接(堆栈跟踪看起来像是您正在尝试从运行在 tomcat 中的东西进行连接)?
  • 所以你是从 192.168.2.1 连接的,对吗?
  • @mic4ael:是的,我确定。我可以通过 pgAdmin 3 毫无困难地连接。
  • @WeareBorg 来自 192.168.2.139。但这是同一个子网 (/24) 还是我错了?

标签: java postgresql jdbc


【解决方案1】:

192.168.2.1/24 意味着 24 位严格(24 位是 3 个字节 (24/8=3) 所以前三个数字是严格的,1 允许不同)所以你需要来自@987654323 的客户端 IP @。

如果这不起作用,请尝试从日志中获取信息。

  1. 编辑配置文件/etc/postgresql/9.4/main/postgresql.conf。 (也许做个备份)
  2. 取消注释#log_destination = 'stderr 行并将目标设置为系统日志log_destination = 'syslog'
  3. 保存重启数据库服务器。
  4. 执行tail -f /var/log/syslog | grep postgres 并尝试从客户端连接。

你应该看到这样的东西:

Oct  7 11:02:18 Ubuntu-1510-wily-64-minimal postgres[1732]: [4-1] 2019-10-07 11:02:18 CEST [1732-2] postgres@cms LOG:  connection authorized: user=XXX database=cms SSL enabled (protocol=TLSv1.2, cipher=ECDHE-RSA-AES128-GCM-SHA256, compression=off)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    • 1970-01-01
    • 1970-01-01
    • 2015-09-26
    • 2014-04-08
    相关资源
    最近更新 更多