在不关闭和打开活动的情况下获取最近在数据库中加载的值。

问题描述 投票:0回答:1

我在使用SQLiteOpenHelper类时遇到了一个问题。我在表中插入一行,然后尝试读取数据,我当时什么都没有得到(就在插入数据之后)。我只有在关闭活动后再重新打开时才会得到信息。

MyDB db = new MyDB(context);
db.insert(string1, string2, string3, string4);

现在在下一行代码中,如果我尝试读取我插入的内容。

List<String> list;
list=db.loadHandler();

列表是空的,直到我关闭活动并再次打开它。为什么会这样?

class MyDB extends SQLiteOpenHelper {

private static final int VERSION_BASEDATOS = 1;

private static final String NAME = "checkList.db";

private static final String TABLA_CHECK_LIST = "CREATE TABLE IF NOT EXISTS checkList" +
        "(id INTEGER PRIMARY KEY AUTOINCREMENT, file TEXT, se TEXT, date TEXT, aux TEXT)";


public MyDB(Context context) {
    super(context, NAME, null, VERSION_BASEDATOS);
}

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL(TABLA_CHECK_LIST);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS checkList");
    onCreate(db);
}

public boolean deleteDB(Context context){
    return context.deleteDatabase(NAME);
}


public void insert(String file, String se, String date, String aux) {
    SQLiteDatabase db = getWritableDatabase();
    if(db != null){
        ContentValues valores = new ContentValues();
        valores.put("file", file);
        valores.put("se", se);
        valores.put("date", date);
        valores.put("aux", aux);
        db.insert("checkList", null, valores);
        db.close();
    }
}

public List<String> loadHandler() {
    List<String> list = new ArrayList<String>();
    String query = "Select*FROM checkList";
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(query, null);
    while (cursor.moveToNext()) {
        int result_0 = cursor.getInt(0);
        String result_1= cursor.getString(1);
        String result_2 = cursor.getString(2);
        String result_3=cursor.getString(3);
        String result_4=cursor.getString(4);

        list.add(result_1+"%:&"+result_2+"%:&"+result_3+"%:&"+result_4);

    }
    cursor.close();
    db.close();
    return list;
}

public int getRowCount(){
    String query = "Select*FROM checkList";
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(query, null);
    return cursor.getCount();
}

public void deleteFirstRow()
{
    SQLiteDatabase db = this.getWritableDatabase();
    String where = "id < (select id from checkList order by id limit 15, 1)";
    db.delete("checkList", where, null);
}

public void orderIt(){
    SQLiteDatabase db = this.getWritableDatabase();
    db.execSQL("VACUUM");
}


public String getLastHash(){
    SQLiteDatabase db = this.getWritableDatabase();
    String query = "Select*FROM checkList";
    Cursor cursor = db.rawQuery(query, null);
    cursor.moveToLast();
    return cursor.getString(1);
}

}
android database
1个回答
1
投票

尽量不要关闭DB,你的操作后,它(你这样做,在两个方法。插入loadHandler):

db.close(); // try to remove this

你可以阅读关于关闭数据库的答案 此职位

© www.soinside.com 2019 - 2024. All rights reserved.