Android SQLite 更新列

Android SQLite Update Column

用户案例:

  1. Select 项目(如果已存在于购物篮中)。
  2. 检查此项目的数量。
  3. 如果商品编号 == 1,则从购物篮中删除该商品 table 和 return 0。
  4. 如果它大于 1,则将其减一并更新 table 和 return 数字-- .

它没有更新我的 "numbers" 列,并默默地通过执行,我很无助,我也不能 post 这里的任何堆栈跟踪,但我正在 post 我的代码fragment,负责这个工作。

public int removeFromBasketasAnonymous(Long _id){

    Log.d("app : ", " _id = " + _id);
    int numbers = 0;
    try {
        database = openDatabaseInReadMode();
        Cursor cursor = database.rawQuery("select * from basket where basket._id=" + _id + ";", null);
        if (cursor != null) {
            cursor.moveToFirst();
            Log.d(APP, "GetCount = " + cursor.getCount());
            if (cursor.getCount() == 1) {
                //this item already present in basket
                numbers = cursor.getInt(1);
                Log.d(APP, " numbers  = " + numbers);
                Log.d(APP, "db id = " + cursor.getString(0));
                String[] columns = cursor.getColumnNames();
                for(String str : columns){
                    Log.d("APP ", " columns = "+str);
                }
                Log.d(APP, " id = " + _id);
                if (numbers == 1) {
                    //remove this row entry
                    cursor.close();

                    database.close();
                    database = openDatabaseInReadWriteMode();
                    database.beginTransaction();
                    String strSQL = "DELETE from basket where basket._id=" + _id;
                    try{
                        database.execSQL(strSQL);
                    }catch(Exception e){
                        e.printStackTrace();
                    }finally{
                        database.endTransaction();
                        database.close();
                    }
                    numbers--;

                } else {
                    //decrement this number by one
                    Log.d(APP, " number " + numbers);
                    numbers--;
                    Log.d(APP, " dcremented numbers = " + numbers);
                    cursor.close();
                    database.close();
                    database = openDatabaseInReadWriteMode();
                    database.beginTransaction();
                    try{
                        ContentValues data = new ContentValues();
                        data.put("numbers", numbers);
                        database.update("basket", data, "_id = " + _id, null);
                    }catch (Exception e){
                        e.printStackTrace();
                    }finally {
                        database.endTransaction();
                        database.close();
                    }
                }
            }

        }
    }finally{
        if(database != null){
            database.close();
        }
    }
    return numbers;
}


public SQLiteDatabase openDatabaseInReadMode() {
    File dbFile = context.getDatabasePath(DB_NAME);
    if (!isDataBaseExist()) {
        try {
            copyDatabase(dbFile);
        } catch (IOException e) {
            throw new RuntimeException("Error creating source database", e);
        }
    }
    /*Log.d("DB available", "path = " + dbFile.exists() + " path" + dbFile.getPath());*/
    /*Log.d("actual path ", "exists = " + isDataBaseExist());*/
    return SQLiteDatabase.openDatabase(dbFile.getPath(), null, SQLiteDatabase.OPEN_READONLY);
}


public SQLiteDatabase openDatabaseInReadWriteMode() {
    File dbFile = context.getDatabasePath(DB_NAME);
    if (!isDataBaseExist()) {
        try {
            copyDatabase(dbFile);
        } catch (IOException e) {
            throw new RuntimeException("Error creating source database", e);
        }
    }
    /*Log.d("DB available", "path = " + dbFile.exists() + " path" + dbFile.getPath());*/
    /*Log.d("actual path ", "exists = " + isDataBaseExist());*/
    return SQLiteDatabase.openDatabase(dbFile.getPath(), null, SQLiteDatabase.OPEN_READWRITE);
}

此致, 沙山克

如何在 Android

中使用数据库事务
  1. 如果你想开始交易有一个方法beginTransaction()
  2. 如果你想提交事务有一个 方法 setTransactionSuccessful(),它将提交 数据库
  3. 如果您已经启动事务,则需要关闭事务,因此有一种方法endTransaction()可以结束您的数据库事务

现在主要有两点

  1. 如果要设置交易成功需要写
    setTransactionSuccessful() 然后 endTransaction() 之后 beginTransaction()

  2. 如果你想回滚你的交易那么你需要endTransaction() 没有通过 setTransactionSuccessful().

  3. 提交交易