【问题标题】:Postgresql not connecting to android using JDBC throwing org.postgresql.util.PSQLException: The connection attempt failedPostgresql 未使用 JDBC 连接到 android 抛出 org.postgresql.util.PSQLException:连接尝试失败
【发布时间】:2015-02-19 23:21:41
【问题描述】:

我正在开发一个需要连接到 Postgresql 数据库的 android 应用程序,我安装了 9.3 版本,并检查了它正在连接的 PGAdminIII。我还在 Eclipse 中创建了一个 java 项目,仅用于测试 JDBC,它连接成功,但是当我尝试从 Android 项目连接到 Postgresql 时,它抛出错误:org.postgresql.util.PSQLException:连接尝试失败。 这是我在 MainActivity.java 中编写的代码

@Override
protected Void doInBackground(Void... params) {
    try {

          Class.forName("org.postgresql.Driver");
          Connection  conn = DriverManager.getConnection("jdbc:postgresql://192.168.43.207:5432/testdb", "postgres", "password");
          System.out.println("connection success");
          conn.close() ;
        } 
        catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return null;

pg_hba.conf

IPv4 本地连接:

托管所有 192.168.43.207 信任

IPv6 本地连接:

托管所有所有 ::1/128 信任

postgresql.conf

listen_addresses = '*'

注意:如果我用 localhost/127.0.0.1 更改 ip 地址 192.168.43.207 它会抛出错误- org.postgresql.util.psqlexception 连接被拒绝。检查主机名和端口是否正确 我用谷歌搜索过它,也看到过 Stackoverflow 上的帖子,但没有任何效果。 我正在使用 windows7 请根据它提供解决方案。 请帮助我,因为我在过去两天一直在与它作斗争,但没有任何效果。

编辑:当我在 Windows 中从 CMD 运行这些命令时,我得到了关注

C:\Windows\system32>sc query postgresql-9.3

SERVICE_NAME: postgresql-9.3
    TYPE               : 10  WIN32_OWN_PROCESS
    STATE              : 4  RUNNING
                            (STOPPABLE, PAUSABLE, ACCEPTS_SHUTDOWN)
    WIN32_EXIT_CODE    : 0  (0x0)
    SERVICE_EXIT_CODE  : 0  (0x0)
    CHECKPOINT         : 0x0
    WAIT_HINT          : 0x0

C:\Windows\system32>netstat -a | findstr 5432
  TCP    0.0.0.0:5432           -PC:0           LISTENING
  TCP    [::]:5432              -PC:0           LISTENING
  TCP    [::1]:5432             -PC:49573       ESTABLISHED
  TCP    [::1]:5432             -PC:49574       ESTABLISHED

【问题讨论】:

  • 你能ping到当前IP进行心跳检查吗?并检查端口 5432 上的服务是否正在运行?
  • 我编辑了它以检查正在运行的服务,我还从命令提示符 ping 了 IP,它正在 100% 发送数据包。
  • 似乎一切都很完美。你能检查Android设备的心跳到PostGreSQL所在的物理系统吗?
  • 所以,为了清楚起见,您的 Android 设备正在尝试连接到 127.0.0.1?您的设备是虚拟设备还是物理设备?
  • 我在 eclipse 上使用 android SDK 打开 android 模拟器来测试应用程序。

标签: java android eclipse postgresql jdbc


【解决方案1】:

您的问题是 Android 上的 127.0.0.1 转到虚拟 Android 设备,而不是托管 PostgreSQL 数据库的机器。引用Android emulator documentation for networking

模拟器的每个实例都在虚拟路由器/防火墙后面运行 将其与您的开发机器的网络隔离的服务 界面和设置以及来自互联网。模拟设备可以 看不到您的开发机器或其他模拟器实例 网络。相反,它只看到它是通过以太网连接的 到路由器/防火墙。

在其下方,有一个虚拟路由器的表格:

在关于使用127.0.0.1(强调我的)的部分中进一步介绍:

还要注意你的开发机器上的地址 127.0.0.1 对应模拟器自带的loopback接口。如果你想 访问在您的开发机器的环回上运行的服务 接口(在你的机器上又名 127.0.0.1),你应该使用 改为特殊地址 10.0.2.2。

如果你想连接到开发机器,你应该使用10.0.2.2而不是127.0.0.1

【讨论】:

    猜你喜欢
    • 2013-03-26
    • 2021-05-25
    • 2022-08-19
    • 2020-08-21
    • 2021-10-21
    • 2012-06-13
    • 1970-01-01
    • 2021-04-22
    • 2014-05-18
    相关资源
    最近更新 更多