需要在Android中使用SQLite的自定义版本

问题描述

我有一个查询使用“ Update From”的android sqlite,此方法添加到最新的sqlite版本(3.33.0)(2020.08.14),我的目标android设备是Lollipop,不幸的是Android Lollipop使用sqlite 3.8.6.1,我需要在所有目标设备上安装新版本的sqlite(最新版本)。

这是我的查询

UPDATE tbl_item_master JOIN select pd.barcode as barcode,sum(pd.qty) as QtyPurchase from tbl_purchase_details pd left join tbl_purchase p on (pd.purchaseNumber = p.purchaseNumber) where p.purchaseDate between '2000-01-01' and '2020-10-10' group by pd.barcode) AS daily USING( barcode ) SET tbl_item_master.closingQty = tbl_item_master.openingQty + daily.QtyPurchase

由于旧版本的sqlite,此查询在MSsql中运行良好,但在Android sqlite中则无法运行。 我正在使用“更新自”。所以我决定在我的应用程序中使用最新的sqlite版本。 从此地址开始:“ https://www.sqlite.org/android/doc/trunk/www/index.wiki” 我下载了sqlite aar文件的最新版本,与本教程完全相同做到了,他们的示例很好地显示sqlite 3.33.0的版本,但是当我在公共类DbHandler扩展sqliteOpenHelper 中使用它时,我的应用程序崩溃了,甚至没有活动。这就是我的用法

DbHandler.java:-----------------------------

package com.myapp.MysqLite;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import org.sqlite.database.sqlite.sqliteDatabase;
import org.sqlite.database.sqlite.sqliteOpenHelper;
import java.util.ArrayList;
import java.util.HashMap; 


public class DbHandler extends sqliteOpenHelper {


    private static final int DB_VERSION = 1;
    private static final String DB_NAME = "myDB";


    public DbHandler(Context context) {
         super(context,DB_NAME,null,DB_VERSION);
    }

   @Override
    public void onCreate(sqliteDatabase db) {


        System.loadLibrary("sqliteX");


        String CREATE_TABLE1 = "CREATE TABLE " + "tbl_1" + "("
                + "id" + " INTEGER PRIMARY KEY AUTOINCREMENT,"
         ....

                + ")";
        db.execsql(CREATE_TABLE1);


        String CREATE_TABLE_2 = "CREATE TABLE " + "tbl_2" + "("
                + "id" + " INTEGER PRIMARY KEY AUTOINCREMENT,"
         
.....
                + ")";
        db.execsql(CREATE_TABLE_2);

        .
.
.
.

    }


    @Override
    public void onUpgrade(sqliteDatabase db,int oldVersion,int newVersion) {

        System.loadLibrary("sqliteX");

        //****************************************************
        db.execsql("DROP TABLE IF EXISTS " + "tbl_1");
        // Create tables again
        onCreate(db);
        //****************************************************
        db.execsql("DROP TABLE IF EXISTS " + "tbl_2");
        onCreate(db);
        //****************************************************
    }

    public void deleteallTables() {
        System.loadLibrary("sqliteX");
        sqliteDatabase db = this.getWritableDatabase();
        db.execsql("delete from " + "tbl_1");
        db.execsql("delete from " + "tbl_2");
        db.close();
    }

.... and other functions

}

以及在活动中如何使用它:-------------------------

DbHandler db;
db = new DbHandler(MainActivity.this);
db.deleteallOrdersAndDetails();

但不幸的是它崩溃了:(

任何帮助将不胜感激,我认为其他人以及我在不久的将来可能需要此解决方

---------我在DBHelper.java中使用了它,发现它没有打开数据库

public String ctest() {

        System.loadLibrary("sqliteX");

        try {
            sqliteDatabase db = this.getWritableDatabase();
            db.close();
            return "opened";
        } catch (Exception e) {
            return "Error " + e.toString();
        }
}

这是错误

Error org.sqlite.database.sqlite.sqliteCantOpenDatabaseException: unkNown error (code 14): Could not open database

我在清单文件中拥有这些权限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

有人有一点时间解决这个问题吗? 谢谢你

这不公平:( 没有解决方案吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)