Java Postgresql未使用JDBC连接到android,抛出org.Postgresql.util.PSQLException:连接尝试失败
我正在开发一个android应用程序,我需要连接到Postgresql数据库,我安装了它的9.3版本,并签入了它正在连接的PGAdminIII。我还在eclipse中创建了一个java项目,只是为了测试JDBC,它正在成功连接,但是当我试图从Android项目连接到Postgresql时,它抛出了一个错误:org.Postgresql.util.PSQLException:连接尝试失败。 下面是我在MainActivity.java中编写的代码Java Postgresql未使用JDBC连接到android,抛出org.Postgresql.util.PSQLException:连接尝试失败,java,android,eclipse,postgresql,jdbc,Java,Android,Eclipse,Postgresql,Jdbc,我正在开发一个android应用程序,我需要连接到Postgresql数据库,我安装了它的9.3版本,并签入了它正在连接的PGAdminIII。我还在eclipse中创建了一个java项目,只是为了测试JDBC,它正在成功连接,但是当我试图从Android项目连接到Postgresql时,它抛出了一个错误:org.Postgresql.util.PSQLException:连接尝试失败。 下面是我在MainActivity.java中编写的代码 @Override protected Void
@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
侦听地址='*'
注意:如果使用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
您的问题是,Android上的
127.0.0.1
会转到虚拟Android设备,而不是您托管PostgreSQL数据库的机器。参考:
模拟器的每个实例都在虚拟路由器/防火墙后面运行
将其与开发计算机的网络隔离的服务
接口和设置,以及从internet获取的信息。模拟设备可以
在上看不到您的开发计算机或其他仿真器实例
网络。相反,它只看到它是通过以太网连接的
到路由器/防火墙
下面是虚拟路由器的表:
在下面关于使用127.0.0.1
的部分(重点是我的):
还请注意,开发计算机上的地址127.0.0.1
对应于仿真器自己的环回接口。如果你想
访问在开发计算机的环回上运行的服务
接口(在您的机器上也称为127.0.0.1),您应该使用
改为特殊地址10.0.2.2。
如果你想连接到开发机器,你应该使用
10.0.2.2
而不是127.0.0.1
。你能ping到当前对应的IP进行心跳检查吗?检查端口5432上的服务是否正在运行?我编辑它是为了检查哪个服务正在运行,我还从命令提示符ping了IP,它正在发送100%的数据包。看起来一切都很完美。你能检查一下安卓设备到PostGreSQL所在物理系统的心跳吗?那么,请澄清一下,你的安卓设备正在尝试连接到127.0.0.1
?您的设备是虚拟设备还是物理设备?我正在eclipse上使用android SDK,它打开android emulator来测试应用程序。