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的主机,这是连接被拒绝的核心原因。
具体修复步骤
修正连接URL的IP地址
- 若使用Android模拟器:将URL中的
127.0.0.1替换为10.0.2.2(模拟器默认的主机回环映射地址); - 若使用实体Android设备:确保设备与主机在同一局域网,替换为主机的局域网IP(可通过
ipconfig(Windows)或ifconfig(Linux/macOS)查看)。
- 若使用Android模拟器:将URL中的
更新pg_hba.conf允许局域网访问
当前配置仅允许本地回环连接,需添加允许Android设备所在IP段的规则,示例:host all all 192.168.0.0/16 md5替换为实际的局域网IP段后,重启PostgreSQL服务生效。
确认防火墙规则
除开放5432端口外,需确保主机防火墙允许Android设备/emulator所在IP段访问该端口。验证网络连通性
在Android设备/emulator上,通过ping测试主机IP是否可达,或用telnet测试主机IP:5432是否能建立连接。
内容的提问来源于stack exchange,提问作者Lavesh Pillay
相关产品推荐
相关产品推荐

