You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio Java连接PostgreSQL报错:127.0.0.1:5432连接被拒绝

Android Studio中Java连接PostgreSQL报错:Connection to 127.0.0.1:5432 refused

报错堆栈信息

org.postgresql.util.PSQLException: Connection to 127.0.0.1:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
    at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:342)
    at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:54)
    at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:253)
    at org.postgresql.Driver.makeConnection(Driver.java:434)
    at org.postgresql.Driver.connect(Driver.java:291)
    at java.sql.DriverManager.getConnection(DriverManager.java:580)
    at java.sql.DriverManager.getConnection(DriverManager.java:218)
    at com.accfinsoftware.skypay.Database.lambda$connect$0$com-accfinsoftware-skypay-Database(Database.java:26)
    at com.accfinsoftware.skypay.Database$$ExternalSyntheticLambda0.run(Unknown Source:2)
    at java.lang.Thread.run(Thread.java:1012)
Caused by: java.net.ConnectException: failed to connect to /127.0.0.1 (port 5432) from /127.0.0.1 (port 58156) after 10000ms: isConnected failed: ECONNREFUSED (Connection refused)
    at libcore.io.IoBridge.isConnected(IoBridge.java:347)
    at libcore.io.IoBridge.connectErrno(IoBridge.java:237)
    at libcore.io.IoBridge.connect(IoBridge.java:179)
    at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:142)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:390)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:230)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:212)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:436)
    at java.net.Socket.connect(Socket.java:646)
    at org.postgresql.core.PGStream.createSocket(PGStream.java:243)
    at org.postgresql.core.PGStream.<init>(PGStream.java:98)
    at org.postgresql.core.v3.ConnectionFactoryImpl.tryConnect(ConnectionFactoryImpl.java:132)
    at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:258)
    ... 9 more
Caused by: android.system.ErrnoException: isConnected failed: ECONNREFUSED (Connection refused)
    at libcore.io.IoBridge.isConnected(IoBridge.java:334)
    ... 21 more

使用的数据库连接代码

public Connection connection;

private final String user = "postgres";
private final String pass = "password";
private String url = "jdbc:postgresql://127.0.0.1:5432/database";

public Database()
{
    connect();

}

private void connect()
{
    Thread thread = new Thread(() -> {
        try
        {
            Class.forName("org.postgresql.Driver");
            connection = DriverManager.getConnection(url, user, pass);

            System.out.println("Connected");
        }
        catch (Exception e)
        {
            System.out.println("Failed");
            e.printStackTrace();
        }
    });
    thread.start();
    try
    {
        thread.join();
    }
    catch (Exception e)
    {
        e.printStackTrace();
        System.out.println("Failed");
    }
}

已尝试的排查步骤

  • 已添加libs文件夹中.jar包的依赖
  • postgresql.conf文件中listen_addresses已设置为'*'
  • 已开放5432端口
  • 可从其他系统连接该数据库
  • pg_hba.conf文件配置如下:
# TYPE  DATABASE        USER            ADDRESS                 METHOD

# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
host    replication     all             127.0.0.1/32            md5
host    replication     all             ::1/128                 md5

解决方案

核心问题

Android模拟器/设备中的127.0.0.1指向自身,而非运行PostgreSQL的主机,这是连接被拒绝的核心原因。

具体修复步骤

  1. 修正连接URL的IP地址

    • 若使用Android模拟器:将URL中的127.0.0.1替换为10.0.2.2(模拟器默认的主机回环映射地址);
    • 若使用实体Android设备:确保设备与主机在同一局域网,替换为主机的局域网IP(可通过ipconfig(Windows)或ifconfig(Linux/macOS)查看)。
  2. 更新pg_hba.conf允许局域网访问
    当前配置仅允许本地回环连接,需添加允许Android设备所在IP段的规则,示例:

    host    all             all             192.168.0.0/16          md5
    

    替换为实际的局域网IP段后,重启PostgreSQL服务生效。

  3. 确认防火墙规则
    除开放5432端口外,需确保主机防火墙允许Android设备/emulator所在IP段访问该端口。

  4. 验证网络连通性
    在Android设备/emulator上,通过ping测试主机IP是否可达,或用telnet测试主机IP:5432是否能建立连接。

内容的提问来源于stack exchange,提问作者Lavesh Pillay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 21:32:53