Postgresql没有使用JDBC抛出org.postgresql.util.PSQLException连接到android:连接尝试失败

时间:2014-12-21 19:23:11

标签: java android eclipse postgresql jdbc

我正在开发一个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

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连接被拒绝。检查主机名和端口是否正确     我已经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

1 个答案:

答案 0 :(得分:2)

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

  

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

在此之下,有一个虚拟路由器表:

Android virtual router network

在关于使用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

相关问题