在Android中使用JDBC MySQL连接数据库?

Posted

技术标签:

【中文标题】在Android中使用JDBC MySQL连接数据库?【英文标题】:Using JDBC MySQL to connect database in Android? 【发布时间】:2016-05-13 08:23:48 【问题描述】:

我创建了一个 android 应用程序来使用 mysql 连接数据库。当我测试与 localhost 10.0.2.2:3306 的连接时,我可以获取数据库,但是当我使用真实主机从我的服务器获取数据库时,我什么也得不到。我的主机是:https://192.168.1.xxx:xxxxx,我的数据库名称是 test。我的问题是什么?请帮我。谢谢你。 这是我的代码:

private class MyTask extends AsyncTask<Void, Void, Void> 

    private String idFromServer;
    private String url="jdbc:mysql://192.168.1.xxx:xxxxx/test";
    String name = "AAA";

    @Override
    protected Void doInBackground(Void... params) 
        try 
            ResultSet result = null;
            String a = "SELECT * FROM testtable";
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            Connection con = DriverManager.getConnection(url,"aaa","abcdef");
            Statement state = con.createStatement();
            result = state.executeQuery(a);
            while (result.next()) 
                if (name.equals(result.getString("name"))) 
                    idFromServer = result.getString("id");
                
            
         catch (IllegalAccessException e) 
            e.printStackTrace();
         catch (InstantiationException e) 
            e.printStackTrace();
         catch (SQLException e) 
            e.printStackTrace();
         catch (ClassNotFoundException e) 
            e.printStackTrace();
        
        return null;
    

    protected void onPostExecute(Void result) 
        id.setText(idFromServer);
        super.onPostExecute(result);
    


【问题讨论】:

JDBC 专为高带宽、低延迟、高可靠的网络连接而设计(例如,桌面到数据库服务器、Web 应用程序服务器到数据库服务器)。移动设备提供的这些功能很少,而且没有一个始终如一。 所以围绕您的数据库创建一个 Web 服务并从 Android 访问它。 does-android-support-jdbc 192.168.1.xxx 不是公共 IP 地址,因此您无法从 Internet 连接到它。 【参考方案1】:

MySql 通常安装有安全限制,因此只能从 localhost 访问它。

你需要执行类似下面的命令来允许其他ip访问

GRANT ALL PRIVILEGES
ON database.*
TO 'youruser'@'%'
IDENTIFIED BY 'yourpassword';

请注意,从任何 IP 提供对 MySql 的访问权限是一种不好的做法,因为它可能会被黑客入侵。因此,通常最好放置一个服务器来拦截来自您的 android 应用程序的请求并直接调用数据库。


注意:还要检查它是否打开了您的应用程序和 mysql 服务器之间的路由。

如果你使用3G你没有使用本地网络并且MySql服务器的IP与192.168.1.xxx不同(即本地网络的ip)。也有可能在本地网络之外,MySql Server 是不可见的。这取决于您的网络配置。

您需要“打开”您的网络,公开端口以访问 mysql,并检查从互联网上看到的本地网络的 ip。否则,您可以使用与本地网络无线连接的手机访问本地网络。

【讨论】:

感谢您的回答。我已经使用 Tunnelblick open ***,我可以从我的浏览器连接数据库,但为什么我不能通过 Android Studio 做到。 是的,我只连接一个IP地址。 我的意思是...你的手机在mysql服务器的同一个网络上? 哦,我想可能是我的问题,我使用的是模拟器手机,它使用的是 3G 而不是 Wifi 我可以在我的模拟器手机上做什么?

以上是关于在Android中使用JDBC MySQL连接数据库?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Mysql JDBC 驱动程序将 Android 与 MySQL 连接 [重复]

Android:用 JDBC 连接 MySql

在 Android 中使用 JDBC 优化 mysql DB 执行

Android开发JDBC连接mysql数据库导入驱动方法

Android JDBC 连接器

Android用jdbc链接mysql并对数据库进行增,删,改,查;注意是Android