我的SQLite表没有更新我的表列[重复]

问题描述 投票:-1回答:2

这个问题在这里已有答案:

这是我的SQLite方法:

   public int updateSingleRow(int id, int i){
    SQLiteDatabase db = myDBHelper.getReadableDatabase();
    ContentValues values = new ContentValues();
    values.put("fab", i);
    String[] whereArgs = {String.valueOf(id)};

    int count = db.update(MyDBHelper.COIN_DETAILS_TABLE ,values,MyDBHelper.UID + "=?",whereArgs);
    CoinDetail cd = getDataByID(id);
    Log.d("CCP",""+cd.getFab());
    return count;
}

这是我的表定义,我已经定义了表列,我想更新fab列: -

  String query_coinDetailTable = "CREATE TABLE " + COIN_DETAILS_TABLE + "("+ UID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
                + CAP_24HR_CAHNGE + " TEXT," + LONG + " TEXT," + MK_CAP + " TEXT," + PERC + " TEXT," + PRICE + " TEXT,"
                + SHAPESHIFT + " TEXT," + SHORT + " TEXT," + SUPPLY + " TEXT," + USD_VOLUME + " TEXT," + VOLUME + " TEXT,"
                + VWAP_DATA + " TEXT," + VWAP_DATA_BTC + " TEXT," + FAB + " INTEGER DEFAULT 0" + ")";
android sqlite android-sqlite
2个回答
1
投票

可能性是您将值(id)作为updateSingleRow方法的第一个参数传递,该值与表中某个行中的UID列不匹配。

您可以通过暂时修改方法来确定这一点: -

public int updateSingleRow(int id, int i){
    SQLiteDatabase db = DatabaseHelper.getReadableDatabase();
    ContentValues values = new ContentValues();
    values.put("fab", i);
    String[] whereArgs = {String.valueOf(id)};
    Cursor csr = db.query(MyDBHelper.COIN_DETAILS_TABLE,
            null,null,null,null,null,null);
    // Possible cause empty table
    if (csr.getCount() < 1) {
        Log.d("CCP","Table " + MyDBHelper.COIN_DETAILS_TABLE + " is empty.");
        return -1;
    }
    Log.d("CCP","Table " +  MyDBHelper.COIN_DETAILS_TABLE +
            " contains " + String.valueOf(csr.getCount() + " rows."));
    boolean foundflag = false;
    StringBuilder idlist = new StringBuilder("Other UID's found :- ");
    while(csr.moveToNext()) {
        int this_id = csr.getInt(csr.getColumnIndex(MyDBHelper.UID));
        if (this_id == id) {
            Log.d("CCP"," Matching row found for UID " + String.valueOf(this_id));
            foundflag = true;
            break;
        } else {
            idlist = idlist.append(" " + String.valueOf(this_id));
        }
    }
    csr.close();
    if (!foundflag) {
        Log.d("CCP","Search for UID " + String.valueOf(id) +
                " failed. " + idlist);
        return -1;
    }

    int count = db.update(MyDBHelper.COIN_DETAILS_TABLE ,values,MyDBHelper.UID + "=?",whereArgs);
    CoinDetail cd = getDataByID(id);
    Log.d("CCP",""+cd.getFab());
    return count;
}

这将告诉您以下之一

  • (a)如果该表为空(可能的原因),
  • (b)如果传递的id不匹配,则后跟表中的UID列表或
  • (c)如果UID列与传递的id匹配。

如果任何检查指示不会进行更新(空表,没有匹配的UID),它也将返回-1。

简而言之,问题不一定是a或b。如果问题表示为a或b,那么您需要调查表中为什么没有行(a)或者为什么传递的id与(b)不匹配。


0
投票

试试这样

updateContact()
    // Updating single contact
public int updateContact(Contact contact) {
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(KEY_NAME, contact.getName());
    values.put(KEY_PH_NO, contact.getPhoneNumber());

    // updating row
    return db.update(TABLE_CONTACTS, values, KEY_ID + " = ?",
            new String[] { String.valueOf(contact.getID()) });
}
© www.soinside.com 2019 - 2024. All rights reserved.