我将数据添加到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" + ")";
答案 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
。所以表是在没有这些列的情况下创建的,然后当我尝试将数据插入所有列并且它们不存在时,我假设没有数据被写入数据库,所以当我尝试提取数据时它不是那里......我不知道创建表格的间距是如此重要!重要的经验教训!感谢所有帮助