无法从SQLite表中检索数据

时间:2014-11-14 09:18:00

标签: android sqlite

我将数据添加到sqlite表中,如下所示:

public void addAuthDetails(String authCode, int sessionId, int paramsCrC, int returnStock, int firstTime){
        SQLiteDatabase db = getWritableDatabase();
        ContentValues authValue = new ContentValues();

        authValue.put(AUTH_CODE, authCode);
        authValue.put(SESSION_ID, sessionId);
        authValue.put(PARAM_CRC, paramsCrC);
        authValue.put(RETURN_STOCK, returnStock);
        authValue.put(FIRST_TIME_RUN, firstTime);

        db.insert(TABLE_AUTH, null, authValue);
    }

此数据库中只有一行,但是,当我尝试查询会话ID时,它返回零,并且我已经调试并且会话ID的值不为零。

以下是我查询以获取会话ID的方法。

 public int getSessionId(){
    int sessionId = 0;
    String sessionIdQuery = "SELECT * FROM " + TABLE_AUTH;

    SQLiteDatabase db = getReadableDatabase();

    Cursor cursor = db.rawQuery(sessionIdQuery, null);

    if(cursor.moveToFirst()){
        sessionId = cursor.getInt(cursor.getColumnIndex(SESSION_ID));
    }
    return sessionId;
}

我不确定为什么我得零值?任何人都可以帮助我,我会非常感激。

编辑某些DBManager代码

 public DBManager(Context ctx) {
    super(ctx, DATABASE_NAME, null, DATABASE_VERSION);
}


@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL(CREATE_USER_TABLE);
    db.execSQL(CREATE_AUTH_TABLE);
    db.execSQL(CREATE_PARAMS_TABLE);
    db.execSQL(CREATE_PRODUCTS_TABLE);
    db.execSQL(CREATE_VENDORS_TABLE);
    db.execSQL(CREATE_STOCK_TABLE);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_USERS);
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_STOCK);
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_VENDORS);
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_PRODUCTS);
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_PARAMS);
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_AUTH);

    onCreate(db);
}


   //TABLE_AUTH Create Statement
    public static final String CREATE_AUTH_TABLE = "CREATE TABLE "
            + TABLE_AUTH + "("
            + AUTH_CODE + " TEXT, "
            + SESSION_ID + " TEXT, "
            + AUTH_TIME + " INTEGER, "
            + TOKEN + " TEXT, "
            + PARAM_CRC + " INTEGER, "
            + FIRST_TIME_RUN + "INTEGER, "
            + RETURN_STOCK + "INTEGER, "
            + ENCRYPT_KEY
            + " TEXT" + ")";

2 个答案:

答案 0 :(得分:1)

我不知道是否存在创建数据库失败的问题,但OnUpgrade方法每次调用时都会删除数据库。请参阅此讨论Confusion: How does SQLiteOpenHelper onUpgrade() behave? And together with import of an old database backup?

您正在从头开始删除数据并创建数据库。

我建议你在已经拥有的所有onupgrade行后面加一个“if”语句:

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

if (newVersion > oldVersion) {
   db.execSQL("DROP TABLE IF EXISTS " + TABLE_USERS);
   db.execSQL("DROP TABLE IF EXISTS " + TABLE_STOCK);
   db.execSQL("DROP TABLE IF EXISTS " + TABLE_VENDORS);
   db.execSQL("DROP TABLE IF EXISTS " + TABLE_PRODUCTS);
   db.execSQL("DROP TABLE IF EXISTS " + TABLE_PARAMS);
   db.execSQL("DROP TABLE IF EXISTS " + TABLE_AUTH);

   onCreate(db);
 }

}

我所介绍的仍然是危险的,每当你有一个新版本的数据库,它将杀死表,删除数据并创建一个新的数据。除非您的应用需要删除每个升级的所有数据。

我建议包含数据库的副本,以便稍后将数据传输到新数据库。

答案 1 :(得分:0)

好的,我为在这个问题上浪费的任何时间道歉。

我设法解决了这个问题。

好吧,我已经设法解决了......上述错误的原因是我错过了一个空格

+ FIRST_TIME_RUN + "INTEGER, "
+ RETURN_STOCK + "INTEGER, ""之间的

INTEGER。所以表是在没有这些列的情况下创建的,然后当我尝试将数据插入所有列并且它们不存在时,我假设没有数据被写入数据库,所以当我尝试提取数据时它不是那里......我不知道创建表格的间距是如此重要!重要的经验教训!感谢所有帮助