2015-09-14 5 views
0

Case Пользователь:Android SQLite Update Column

  1. Выберите элемент по идентификатору, если они уже присутствуют в корзине.
  2. Проверьте номер этого элемента.
  3. Если номера позиций == 1, то удалите этот элемент из таблицы корзины и верните 0.
  4. Если его больше 1, то уменьшите его на единицу и обновите таблицу и верните номер--.

Его не обновляет столбец «числа» и бесшумно проходит через выполнение, и я беспомощен, и я не могу опубликовать трассировку стека здесь, но я отправляю свой фрагмент кода, ответственный за это задание.

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); 
} 

С уважением, Shashank

+0

Почему вы не можете отправить стек? – Opiatefuchs

+0

Это поможет мне. http://stackoverflow.com/questions/5987863/android-sqlite-update-statement, но я сделал то же самое. – shank2111

+0

@Opiatefuchs, его бесшумно проходит код и номер столбца не обновляется .. когда я запускаю тот же код опять же, число по-прежнему совпадает с предыдущим. – shank2111

ответ

1

Как вы можете использовать транзакции базы данных в Android

  1. Если вы хотите начать транзакцию существует метод beginTransaction()
  2. Если вы хотите, чтобы совершить транзакцию, существует метод setTransactionSuccessful(), который будет фиксировать значения в базы данных
  3. Если вы были начать транзакцию, Вы должны закрыть сделку так есть метод endTransaction() который будет конец транзакции базы данных

В настоящее время существуют две основные точки

  1. Если вы хотите установить успешную транзакцию, вам необходимо написать
    setTransactionSuccessful(), а затем endTransaction() после beginTra nsaction()

  2. Если вы хотите откатить транзакцию, то вам нужно endTransaction() без совершения сделки по setTransactionSuccessful().