问题描述
我有一个查询使用“ 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 (将#修改为@)