我正在开发一个Android应用程序,我需要连接到Postgresql数据库,我安装了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
托管所有192.168.43.207信任
托管所有:: 1/128信任
postgresql.conf中
listen_addresses =' *'
注意:如果我用localhost / 127.0.0.1更改IP地址192.168.43.207,则会抛出错误 - org.postgresql.util.psqlexception连接被拒绝。检查主机名和端口是否正确 我已经google了它,也看过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
答案 0 :(得分:2)
您的问题是Android上的127.0.0.1
转到虚拟Android设备而不是托管PostgreSQL数据库的计算机。引用Android emulator documentation for networking:
模拟器的每个实例都在虚拟路由器/防火墙后面运行 将其与开发机器的网络隔离开来的服务 接口和设置以及来自互联网。仿真设备可以 没有看到您的开发机器或其他模拟器实例 网络。相反,它只看到它通过以太网连接 到路由器/防火墙。
在此之下,有一个虚拟路由器表:
在关于使用127.0.0.1
(强调我的)的部分中进一步说明:
另请注意您的开发计算机上的地址127.0.0.1 对应于仿真器自己的环回接口。如果你想 在开发机器的环回上运行的访问服务 界面(在您的机器上为a.k.a. 127.0.0.1),你应该使用 特殊地址10.0.2.2而不是。
如果要连接到开发计算机,则应使用10.0.2.2
而不是127.0.0.1
。