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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.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 SQLite:编译时没有这样的表_Android_Sqlite_Android Asynctask - Fatal编程技术网

Android SQLite:编译时没有这样的表

Android SQLite:编译时没有这样的表,android,sqlite,android-asynctask,Android,Sqlite,Android Asynctask,我有一个长时间运行的任务,我在恢复活动时运行它。该任务涉及查询数据库,然后解密一些数据,然后手动对其排序,然后使用事务更新数据库中的排序顺序 当我从Activities主UI线程运行它时,这可以正常工作,但是当我从AsyncTask中执行相同的任务时,我总是会遇到以下错误: I/SqliteDatabaseCpp(5166):sqlite返回:错误代码=1,msg=no这样的表:househouse,db=/mnt/sdcard/myDatabase.db 无此类表格:编译时:无此类表格:住户

我有一个长时间运行的任务,我在恢复活动时运行它。该任务涉及查询数据库,然后解密一些数据,然后手动对其排序,然后使用事务更新数据库中的排序顺序

当我从Activities主UI线程运行它时,这可以正常工作,但是当我从AsyncTask中执行相同的任务时,我总是会遇到以下错误:

  • I/SqliteDatabaseCpp(5166):sqlite返回:错误代码=1,msg=no这样的表:househouse,db=/mnt/sdcard/myDatabase.db
  • 无此类表格:编译时:无此类表格:住户:,编译时:
    选择街道不为空且长度(LTRIM(RTRIM(street))>0的不同街道
我知道数据库存在,并且SQL语句很好,因为它在AsyncTask之外运行良好。从异步任务中访问我的数据库是否会导致问题

我在下面的“SELECT DISTINCT”原始查询中遇到错误

private boolean update_street_sort_order() {
    boolean returnValue = false;
    DBUtilities objDbUtil = null;
    Cursor cCases = null;
    final String SORT_ATTRIBUTE = "street_sort_order";
    final int STREET_INDEX = 0;
    final int ENCRYPTED_STREET = 0;
    final int DECRYPTED_STREET = 1;
    try {
        objDbUtil = DBUtilities.getInstance(this);
        if (objDbUtil != null) { // Get list of cases
            ArrayList<String[]> alStreet = new ArrayList<String[]>();
            SQLiteDatabase sqlitedatabase = objDbUtil.getDatabase();
            if (sqlitedatabase != null && sqlitedatabase.isOpen()) {
                cCases = sqlitedatabase.rawQuery("SELECT DISTINCT street "
                        + "FROM Household " + "WHERE street IS NOT NULL "
                        + "AND LENGTH(LTRIM(RTRIM(street)))>0", null);
                String _password = this.context.getPassword();
                if (cCases != null && cCases.moveToFirst()) {
                    do { // Create list of en/decrypted streets
                        alStreet.add(new String[] {
                                cCases.getString(STREET_INDEX),
                                Crypto.decrypt(_password,
                                        cCases.getString(STREET_INDEX)) });
                    } while (cCases.moveToNext());
                }
                if (cCases != null) {
                    cCases.close();
                    cCases = null;
                }
                int alStreet_length = alStreet.size();
                if (alStreet_length > 0) {
                    Collections.sort(alStreet, new Comparator<String[]>() {
                        @Override
                        public int compare(String[] lhs, String[] rhs) {
                            return lhs[DECRYPTED_STREET]
                                    .compareToIgnoreCase(rhs[DECRYPTED_STREET]);
                        }
                    }); // sort decrypted street using custom comparator
                    StringBuilder sql_transaction = new StringBuilder(
                            "BEGIN TRANSACTION;" + "UPDATE Household SET "
                                    + SORT_ATTRIBUTE + "=NULL;");
                    for (int i = 0; i < alStreet_length; i++) {
                        sql_transaction.append(String.format(
                                "UPDATE Household " + "SET "
                                        + SORT_ATTRIBUTE + "=%1$d "
                                        + "WHERE street=\"%2$s\";", i,
                                alStreet.get(i)[ENCRYPTED_STREET]));
                    }
                    sql_transaction.append("COMMIT;");
                    // execute transaction
                    sqlitedatabase.execSQL(sql_transaction.toString());
                }
                returnValue = true;
            }
        }
    } catch (Exception e) {
        Log.e(Utilities.getFullMethodName(e), e.getMessage());
    } finally {
        if (objDbUtil != null) { // release resources
            objDbUtil.close();
            objDbUtil = null;
        }
    }
    return returnValue;
private boolean update\u street\u sort\u order(){
布尔返回值=false;
DBUtilities objDbUtil=null;
游标cCases=null;
最后一个字符串SORT\u ATTRIBUTE=“street\u SORT\u order”;
最终综合街道指数=0;
最后一条街道=0;
最终整数解密_街=1;
试一试{
objDbUtil=DBUtilities.getInstance(this);
如果(objDbUtil!=null){//获取案例列表
ArrayList alStreet=新的ArrayList();
SQLiteDatabase SQLiteDatabase=objDbUtil.getDatabase();
if(sqlitedatabase!=null&&sqlitedatabase.isOpen()){
cCases=sqlitedatabase.rawQuery(“选择不同的街道”
+“来自住户”+“其中街道不为空”
+“和长度(LTRIM(RTRIM(街道))>0”,空);
String_password=this.context.getPassword();
if(cCases!=null&&cCases.moveToFirst()){
是否{//创建en/解密街道列表
添加(新字符串[]){
cCases.getString(街道索引),
加密解密(_密码,
getString(STREET_INDEX))};
}while(cCases.moveToNext());
}
如果(cCases!=null){
cCases.close();
cCases=null;
}
int alStreet_length=alStreet.size();
如果(同时长度>0){
Collections.sort(alStreet,newcomparator(){
@凌驾
公共整数比较(字符串[]lhs,字符串[]rhs){
返回lhs[解密的_街]
.compareToIgnoreCase(rhs[解密街]);
}
});//使用自定义比较器对解密的街道进行排序
StringBuilder sql_事务=新建StringBuilder(
“开始事务处理;”+“更新家庭集合”
+排序_属性+“=NULL;”;
对于(int i=0;i
创建DB表“Househouse”的代码在哪里?共享它数据库表Household是与应用程序一起预打包的,不是由SQLiteOpenHelper创建的。如上所述,数据库表Household存在并且在运行AsyncTask之前操作,因此我知道它存在并且可以访问。这是上下文问题吗?在
objDbUtil.getDatabase()中
-您是否引用了每个打包的DB?具有确切的DB文件位置和名称是:
公共同步SQLiteDatabase getDatabase(){if(this.database==null | | |!this.database.isOpen()){this.database=this.getWritableDatabase()}返回this.database;}
@Sean,其中使用
SQLiteDatabase.openDatabase(路径、工厂、标志)