android - 从原生访问插件的sqlite数据库

标签 android objective-c sqlite cordova android-sqlite

我正在开发一个 ionic 应用程序,它有几个原生部分

我正在使用这个插件,用于本地数据库

https://github.com/litehelpers/Cordova-sqlite-storage

我从混合部分创建或访问它没有问题,功能如下:

 var db = window.sqlitePlugin.openDatabase({
          name: "dbApplication.sqlite",
          path: 'documents/',
          environment: "SQLITE_ENV_MOBILE",
          bgType: 1
        });

        db.transaction(function (tx) {

          tx.executeSql("INSERT INTO main.table ( name, email, sfid ) VALUES (?,?,?)", [user.name, user.email, user.sfid], function () {
            deferred.resolve();
          }, errorCallback);

        }, errorCallback);

但我正在尝试使用以下代码从 android native 部分访问它:
    private static String DB_PATH = "documents/";
    private static String DB_NAME ="dbApplication.sqlite";// Database name

public boolean openDataBase() throws SQLException
    {
        String mPath = DB_PATH + DB_NAME;
        mDataBase = SQLiteDatabase.openDatabase(mPath, null, SQLiteDatabase.CREATE_IF_NECESSARY);
        return mDataBase != null;
    }

    public HashMap getDataSigner(Integer signerId) {
        openDataBase();
        SQLiteDatabase db = mDataBase;
        //"CREATE TABLE IF NOT EXISTS main.signers (idSigner INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, name TEXT, idNumber TEXT, rol TEXT)"

        Cursor c=db.rawQuery("SELECT name, idNumber FROM signers WHERE idSigner="+signerId+"", null);
        HashMap signer = new HashMap();
        if(c.moveToFirst())
        {
            signer.put("name", c.getString(0));
            signer.put("idNumber", c.getString(1));

        }
        return signer;
    }

它返回以下错误:
    Failed to open database 'documents/dbApplication.sqlite'.
android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error(Sqlite code 14): Could not open database,(OS error - 2:No such file or directory)

所以我的问题是:对于使用 sqlite 插件创建的数据库,android 中数据库的正确路径是什么?

我也尝试挖掘插件代码,但我不太了解,因为我不是一个好的android程序员

另外,如果有人可以从 IOS 本地访问它,那就太棒了,因为我稍后会需要它

谢谢!

最佳答案

我回答自己

Android中的正确路径是:

mDataBase = SQLiteDatabase.openDatabase(this.cordova.getActivity().getDatabasePath(DB_NAME).getAbsolutePath(), null, SQLiteDatabase.CREATE_IF_NECESSARY);

另外,使用前记得关闭连接,否则无法使用

关于android - 从原生访问插件的sqlite数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36542642/

相关文章:

objective-c - 移动到另一个 View 时选项卡栏 Controller 消失(iOS SDK,使用 Storyboard)

objective-c - UIImagePickerController和UIPopoverController两个内存泄漏

android - 通过亚行发送短信到手机

ios - Swift 中的匿名内部类

java - Android LibGDX 'Cannot resolve symbol setRadius'

sqlite - 根据列值动态更新SQLite行

python - 如何从 Python 中的 SQLite3 数据库查询构建字典列表?

c# - SQLite 报告插入查询错误,即使插入的行

java - 单个 Activity 中的多个 Intent

java - 为什么webp文件在aab中不显示?