添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

Android上的SQLite JDBC驱动

7 人关注

I'm trying to use xerial sqlite-jdbc 我已经在我的gradle中导入了这个依赖 'org.xerial:sqlite-jdbc:3.18.0' 。 我的代码如下。

 try {
        Class.forName("org.sqlite.JDBC");
        Connection connection = DriverManager.getConnection("jdbc:sqlite:hs.db");
    } catch (ClassNotFoundException eString) {System.err.println("Could not init JDBC driver - driver not found");
    } catch (java.sql.SQLException e) {e.printStackTrace();}

在我的项目中使用android.database.sqlite是不可能的,所以请不要把它作为一个答案。

1 个评论
对该库的官方支持似乎是 in this Google Group 基于 文件 .
android
sqlite
jdbc
tasgr86
tasgr86
发布于 2017-05-24
4 个回答
dherediat
dherediat
发布于 2022-08-19
0 人赞同
 compile 'org.sqldroid:sqldroid:1.0.3'
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.SQLException;
public class MainActivity extends AppCompatActivity {
    private Connection connection;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        try {
            DriverManager.registerDriver((Driver) Class.forName("org.sqldroid.SQLDroidDriver").newInstance());
        } catch (Exception e) {
            throw new RuntimeException("Failed to register SQLDroidDriver");
        String jdbcUrl = "jdbc:sqldroid:" + "/data/data/" + getPackageName() + "/my-database.db";
        try {
            this.connection = DriverManager.getConnection(jdbcUrl);
        } catch (SQLException e) {
            throw new RuntimeException(e);
    @Override
    public void onDestroy() {
        if (connection != null) {
            try {
                connection.close();
            } catch (SQLException e) {
                throw new RuntimeException(e);
        super.onDestroy();

https://github.com/SQLDroid/SQLDroid

正如我所说的,这个项目没有选择,我必须使用JDBC连接。
谢谢。这是我最近一直在使用的。但是在最近升级了gradle和Android Studio之后,我得到了这个异常 "java.lang.NoClassDefFoundError: org.sqlite.SQLiteConnection".所以我现在正在尝试xerial,但是我有同样的问题。
这可能是xerial jdbc没有安装,试着清理项目,如果不工作,试着减少这一行 Class.forName("org.sqlite.JDBC"); 因为在github资源库中没有这一行。 github.com/xerial/sqlite-jdbc
Vijayendra Vasu
Vijayendra Vasu
发布于 2022-08-19
0 人赞同

我需要在我的服务器DB和我的手机DB之间共享一些数据库代码,所以我花了很多时间来编写使用JDBC的通用代码。

然而,在已经深陷于这项工作之后,我所发现的是 在安卓系统上,基本上没有一个有效的JDBC实现。 . I would strongly 敦促你不要走这条路--Xerial和SQLDroid JDBC驱动都有重大问题,我在测试过程中才发现。

Problems with Xerial

它在安卓上就是不工作 :)它甚至不能加载 - 我遇到了 this issue 即使尝试了几个小时,也无法解决这个问题。

Problems with SQLDroid

  • See the Open Issues page - some of them were pretty scary to me. The deal breaker for me was the lack of batch support.
  • See the Known Issues page before you start.
  • 最后,我最终使用android.database.sqlite类创建了我所需要的java.sql接口和方法的一个小子集的实现。这比我想象的要轻松得多(对于我所需要的功能子集,我只花了几个小时),而且效果很好。

    你能说更多关于 "我需要的java.sql接口和方法的一个小子集的实现 "吗?你在服务器上也使用了这个子集吗?你用什么API来实现它?在java中是否有一个更直接的sqlite API?
    对于我在服务器上使用的每个java.sql接口,我在我的Android项目中创建了一个类。例如,对于 java.sql.Connection 接口,我创建了以下类。【替换代码1然后,在Android Studio中,我选择了 "实现方法 "的动作,以创建每个方法的虚拟实现。然后我只实现了那些我实际使用的 android.database.sqlite 类的方法。我希望这能说明问题。 有很多SQLite JDBC的实现,但我找不到任何(2019年)能在Android上运行的实现。
    在该页中 github.com/xerial/sqlite-jdbc 它写道:"从下载页面(或通过使用Maven)下载sqlite-jdbc-(VERSION).jar,然后将此jar文件追加到你的classpath中。"说 "它只是在Android上不工作 "是不正确的。
    mysh
    mysh
    发布于 2022-08-19
    0 人赞同

    我的方法是这样的。

  • do some config in app/build.gradle , and copy a so file, looks ugly, but really works in my Android 9.0 system.
  • android {
        defaultConfig {
            ndk {
                abiFilters "armeabi-v7a"
        sourceSets {
            main {
                jniLibs.srcDirs = ['libs']
    dependencies {
        implementation 'org.xerial:sqlite-jdbc:3.34.0'
    
  • then copy this file sqlite-jdbc-3.34.0.jar!\org\sqlite\native\Linux\android-arm\libsqlitejdbc.so to app/libs/armeabi-v7a/, which looks like this: enter image description here.

  • 和建成的apk看起来像。

  • 现在你可以在安卓上享受javax.sql.DataSource的sqlite。

  •