Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android支持JDBC吗_Android_Sqlite_Jdbc - Fatal编程技术网

Android支持JDBC吗

Android支持JDBC吗,android,sqlite,jdbc,Android,Sqlite,Jdbc,我知道Android上有一个Android.database.sqlite包,它提供了一些有用的类来管理内部Android数据库 问题是-我可以使用标准java.sql包来操作Android的数据库而不使用Android.database.sqlite中的任何内容吗。*我尝试使用sqlite JDBC驱动程序打开连接,但当我添加库作为项目的e引用时,eclipse崩溃了,“java堆内存不足…无法转换为dalvik VM”.您无法轻松导入实现java.*类的JAR。而且,JDBC需要移植到And

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


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

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

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

Android的SQLite数据库有一个(未记录的?)JDBC驱动程序。试试这个: (来自)


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


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

现在有这样一个驱动程序:。

android从第一天起就得到了JDBC的全面支持,但没有任何驱动程序(至少是官方的)。JDBC驱动程序的一般问题是大多数依赖于本机代码,这限制了可移植性,除非开发人员特别考虑Android

  • 在2.x左右的Android版本中,似乎有一个非官方的SQLite JDBC驱动程序,
    SQLite.JDBCDriver
    ,支持
    JDBC:SQLite:/path/to/db
    。然而,它似乎早就被删除了(至少从4.4.4开始)
  • 并且是为Android编写的第三方JDBC驱动程序。然而,一些用户报告了与这些不同的问题;我自己都没试过
  • 就我个人而言,我已经成功地使用了平面文件数据库(它也可以在客户机/服务器模式下运行,我还没有在Android上尝试过)。作为纯Java(没有本地代码),它在Android和JRE之间是完全可移植的

在Android上使用JDBC时可能遇到的另一个问题是,一些Android机制(如内容提供商)需要一个
游标
实例,如
Android.database.sqlite.
,而JDBC有
结果集
。由于这两个类在很大程度上是彼此的功能等价物,并且
Cursor
是一个接口,因此您可以编写一个适配器类,该类实现
Cursor
,并将其方法转换为它们的
ResultSet
等价物。

还有另一个驱动程序。我让它在我的应用程序中工作,如前所述。然而,并非所有的应用程序二进制接口都支持它,但大多数设备都支持它。

不幸的是,它没有维护,并且缺少很多功能,比如在插入后获取生成的密钥:(这有点误导:JDBC框架本身存在于Android中,可以使用(通过这种方式连接到HSQLDB)。纯Java JDBC驱动程序(就像HSQLDB一样)可以与Android一起工作,就像其他JAR一样(除了使用Android不支持的API,这不是JDBC的问题)。问题是,包括SQLite在内的大多数JDBC驱动程序都是围绕本机代码核心构建的,必须进行移植。根据我发现的其他信息,这似乎适用于2.x范围内的Android版本。在4.4.4及更高版本上,它不再存在。
    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);
    }