Android支持JDBC吗?

时间:2009-11-13 10:46:19

标签: android sqlite jdbc

我知道在Android上有android.database.sqlite包,它提供了有用的类来管理内部的android数据库。

问题是 - 我可以使用标准的java.sql包来操作Android的数据库,而无需使用android.database.sqlite中的任何内容。*我尝试使用SQLite JDBC驱动程序打开连接但是当我添加库作为e引用时项目eclipse崩溃,“java堆内存不足......无法转换为dalvik VM”。

6 个答案:

答案 0 :(得分:17)

您无法轻松导入实施java.*类的JAR。并且,JDBC需要移植到Android,因为它可能依赖于Android缺乏的JavaSE中的类。并且,无论如何,你需要为SQLite编写自己的JDBC驱动程序,包装Android已经提供的API,因为我怀疑现有的JDBC驱动程序使用JNI。而且,当所有这一切都完成后,您将拥有一个增加了大量膨胀的应用程序,使人们下载和保留您的应用程序的可能性降低。

简而言之,我不会走这条路。

答案 1 :(得分:11)

Android的SQLite数据库有一个(未记录的?)JDBC驱动程序。试试这个: (来自http://groups.google.com/group/android-developers/browse_thread/thread/cf3dea94d2f6243c

    try {
        String db = "jdbc:sqlite:" + getFilesDir() + "/test.db";

        Class.forName("SQLite.JDBCDriver");
        Connection conn = DriverManager.getConnection(db);
        Statement stat = conn.createStatement();
        stat.executeUpdate("create table primes (number int);");
        stat.executeUpdate("insert into primes values (2);");
        stat.executeUpdate("insert into primes values (3);");
        stat.executeUpdate("insert into primes values (5);");
        stat.executeUpdate("insert into primes values (7);");

        ResultSet rs = stat.executeQuery("select * from primes");
        boolean b = rs.first();
        while (b) {
            Log.d("JDBC", "Prime=" + rs.getInt(1));
            b = rs.next();
        }

        conn.close();
    } catch (Exception e) {
        Log.e("JDBC", "Error", e);
    } 

答案 2 :(得分:5)

JDBC驱动程序未记录且不受支持。请不要使用此代码。

避免使用java.sql并改为使用android.database.sqlite。

答案 3 :(得分:2)

现在有这样的驱动程序:SQLDroid

答案 4 :(得分:0)

从第一天开始,Android就具有完整的JDBC支持,但没有附带任何驱动程序(至少是正式提供)。 JDBC驱动程序的普遍问题是,大多数驱动程序都依赖于本机代码,除非开发人员特别考虑使用Android,否则这会限制可移植性。

  • 在2.x左右的Android版本中,似乎已经有一个非官方的SQLite JDBC驱动程序SQLite.JDBCDriver,它支持jdbc:sqlite:/path/to/db。但是,它似乎已被删除(至少从4.4.4开始)。
  • SQLDroidXerial SQLite-JDBC是为Android编写的第三方JDBC驱动程序。但是,一些用户报告了与此相关的各种issues;我自己还没有尝试过。
  • 我个人已经成功地将HSQLDB与平面文件数据库一起使用(它也可以在客户端/服务器模式下运行,我没有在Android上尝试过)。由于是纯Java(没有本地代码),因此可以在Android和JRE之间完全移植。

在Android上使用JDBC时可能遇到的另一个问题是,某些Android机制(例如内容提供商)期望使用Cursor使用的android.database.sqlite.*实例,而JDBC具有{{1} } 为了这个目的。由于这两个在很大程度上在功能上是等效的,并且ResultSet是一个接口,因此您可以编写实现Cursor并将其方法转换为等效的Cursor的适配器类。

答案 5 :(得分:0)

还有另一个 SQLite-jdbc 驱动程序。我按照 here 的描述让它在我的应用程序中运行。但是,并非所有应用程序二进制接口都支持它,但支持大多数设备。