安卓:安卓设备支持JDBC吗?

13

我正在开发一个Android应用程序,使用JDBC将数据发送到数据库而不使用任何web服务。我在Android 2.2模拟器上进行了实验,成功将数据发送到MySQL数据库(本地主机)。之后,我尝试使用Android 2.2设备发送数据,将路径从jdbc:mysql://10.0.2.2:3306/改为jdbc:mysql://xx.xx.xx.xx:3306/

xx.xx.xx.xx是我的本地主机机器的ipconfig中获取的。但是它在设备上无法工作。可能的原因是什么?

主要疑问:

  1. Android设备目前支持JDBC吗?
  2. Android 2.2会支持JDBC吗?
  3. 如果有支持,哪些Android版本会支持JDBC?

看这里!你提到的任何疑问都不是导致你问题的原因,请查看我的回答。 - Behnam
5个回答

10

是的。你必须记得将JDBC连接代码放在AsyncTask中, 否则你会烧起来!


1
不要将“INTERNET”权限误认为是“uses INTERNET”权限。你需要后者来执行JDBC。 - Behnam

1

Android设备是否支持JDBC。

Android 2.2是否支持JDBC。

如果支持,哪些Android版本将支持JDBC。

不支持本地MYSQL数据库,因此无法从Android设备使用JDBC连接,仅支持sqlite数据库。

如果要从服务器使用数据库,则只需为其创建Web服务,所有数据库连接都由服务器处理。

但是它可以帮助您了解JDBC和Android的可怕之处! SO Question


我需要使用远程MySQL数据库。我不想进行任何Web服务调用。 - sachi

0

是的,您可以在Android中使用JDBC连接到数据库。只需将以下行添加到Gradle依赖项中:

 compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.44'

别忘了根据你的需要更改版本。

添加后,gradle同步将负责一切,您只需以与简单的Java JDBC程序相同的方式连接到DB即可。


0

看起来你的Mysql安装只允许本地主机连接。更新你的Mysql配置,允许任何主机连接。

从我所看到的,java.sql自API级别1开始就得到支持,我认为这种支持不会很快被移除。

/Thomas


0

下载 MySQL JDBC Connector 3.0.17并将其添加到您的Android项目构建路径中。

import java.sql.Connection;



import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import android.app.Activity;

导入 android.os.Bundle; 导入 android.widget.TextView;
public class MysqlSample01Activity extends Activity {

private static final String url = "jdbc:mysql://<server>:<port>/<database>";
private static final String user = "<username>";
private static final String pass = "<password>";

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    testDB();
}

public void testDB() {
    TextView tv = (TextView)this.findViewById(R.id.text_view);
    try {
        Class.forName("com.mysql.jdbc.Driver");
        Connection con = DriverManager.getConnection(url, user, pass);
        /* System.out.println("Database connection success"); */

        String result = "Database connection success\n";
        Statement st = con.createStatement();
        ResultSet rs = st.executeQuery("select * from table_name");
        ResultSetMetaData rsmd = rs.getMetaData();

        while(rs.next()) {
            result += rsmd.getColumnName(1) + ": " + rs.getInt(1) + "\n";
            result += rsmd.getColumnName(2) + ": " + rs.getString(2) + "\n";
            result += rsmd.getColumnName(3) + ": " + rs.getString(3) + "\n";
        }
        tv.setText(result);
    }
    catch(Exception e) {
        e.printStackTrace();
        tv.setText(e.toString());
    }   

}

}


我已经添加了JAR文件,并且按照您的示例进行了操作。但是在设备上无法运行。我该如何在设备上指定路径? - sachi
2
也许您的 IP 地址被防火墙阻止了,您需要在防火墙设置中添加例外,并且如果您正在使用路由器,则需要进行端口转发。 - Akilan
1
如果我使用这种代码,是否意味着有人可以反编译我的应用程序并找到IP、端口、数据库名称、用户名和密码? - TMH

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接