Android SQLite: Güncelleme İfadesi


91

Uygulamamda SQLite uygulamam gerekiyor. Bu öğreticiyi takip ettim .. Android One'da veritabanları oluşturma ve kullanma

Herşey yolunda gidiyor. 5 sütunlu 1 satır ekledim. Şimdi sadece 1 sütunun değerini güncellemek istiyorum ve diğerleri aynı kalacak.

Öğreticide bir güncelleme yöntemi var ancak tüm parametrelere ihtiyacı var, ancak yalnızca bir sütunu güncellemek istiyorum.


İstenen URL /index.php/articlesdatastorage/235-creating-and-using-databases-in-android-one bu sunucuda bulunamadı.
Machado

Yanıtlar:


165

Aşağıdaki kodu kullanabilirsiniz.

String strFilter = "_id=" + Id;
ContentValues args = new ContentValues();
args.put(KEY_TITLE, title);
myDB.update("titles", args, strFilter, null);

13
Hatta şunları da yapabilirsiniz: myDB.update ("başlıklar", args, strFilter, new String [] {Integer.toString (ID)}); strFilter'ı "_id =?" olarak ayarladıysanız ... Tek bir öğeyle ilgili can sıkıcı şey, onu yine de bir diziye koymanız gerektiğidir, bu da onu rahatsız edici hale getirebilir. Yine de doğru cevaba oy verildi.
joshhendo

4
@Dheeraj - Bu yalnızca ContentValues ​​nesnesine eklenen sütunu güncelleyecektir
Simonw

2
Eğer yanılmıyorsam @joshhendo'nun kodu da SQL enjeksiyonlarını engellemelidir, bu cevabın dikkate almadığı bir şey. Bağımsız değişken bir parametre olarak iletildiğinden, temeldeki kod tarafından öncelenir.
r41n

Kendi başınıza tırnak işareti koymanız gerekir Id. Şunun gibi bir şey:String strFilter = "_id='" + Id + "'";
Guillaume

118

Deneyebilirsin:

db.execSQL("UPDATE DB_TABLE SET YOUR_COLUMN='newValue' WHERE id=6 ");

Veya

ContentValues newValues = new ContentValues();
newValues.put("YOUR_COLUMN", "newValue");

db.update("YOUR_TABLE", newValues, "id=6", null);

Veya

ContentValues newValues = new ContentValues();
newValues.put("YOUR_COLUMN", "newValue");

String[] args = new String[]{"user1", "user2"};
db.update("YOUR_TABLE", newValues, "name=? OR name=?", args);

53

Hepsi bunun nasıl yapılacağı öğreticide var:

    ContentValues args = new ContentValues();
    args.put(columnName, newValue);
    db.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null);

Kullanım ContentValuesgüncellenen sütunlar ve daha ayarlamak için update()yalnızca güncelleme istediğiniz satırları güncellemek için specifiy, masa ve bir kritere sahip olduğu yönteme.


-1. Soru, bir satırın tamamını güncellememek değil, bir satırdaki tek bir sütunu güncellemektir. Alex'in cevabı doğru.
Dheeraj Vepakomma

7
Dheeraj, istediğiniz kadar args.put (columnName, newValue) ekleyebilirsiniz.
Simon Rolin

18

her zaman SQL çalıştırabilirsiniz.

update [your table] set [your column]=value

Örneğin

update Foo set Bar=125

3
Bunun için (oldukça kolay ve kullanışlı) bir API varsa, neden açık bir SQL ifadesi kullanasınız?
Stephan

3
@Stephan: Çünkü standart SQLite değil. API, DB farklı platformlardaki uygulamalar arasında paylaşıldığında özellikle çok fazla
bağlanıyor

@Stephan Sorunun tek doğru cevabı bu. OP, tüm satırı güncellemek için değil, bir satırdaki tek bir sütunu güncellemek ister.
Dheeraj Vepakomma

API'yi kullanmak burada daha iyi bir bahis, orta bir çözüm olmadığına şaşırdım, C kitaplığı biçimlendiricileri ve belirteçleri yürütmek ve ayarlamak için bir SQL tanımlamanıza izin verir, sonraki adım değişkenleri bağlamak için C api kullanmaktır. SQL dizesindeki belirteçler, böylelikle ayrıştırma hatalarından ve alıntı sorunlarından vb. kaçınılır ... burada neredeyse çok yardımcı olur, SQL'in bir kısmını bile yazmaz, hoş hissettirmez ... bunun yerine birleştirilmiş bir SQL dizgisi.
Daniel

Dizge tek tırnak işaretleri ve bazı özel karakterler içerdiğinde bu yöntem başarısız olur. @Nike cevabı doğru.
Güneşli

1

SQLiteDatabase nesnesi, veritabanındaki işlem türüne bağlıdır.

Daha fazla bilgi için resmi web sitesini ziyaret edin:

https://developer.android.com/training/basics/data-storage/databases.html#UpdateDbRow

SQLite veritabanı üzerindeki istişarelerin nasıl değiştirileceğini açıklar.

SATIR EKLE

Veri havuzunu yazma modunda alır

SQLiteDatabase db = mDbHelper.getWritableDatabase();

Sütun adlarının anahtar olduğu yeni bir değerler haritası oluşturun

ContentValues values = new ContentValues();
values.put(FeedEntry.COLUMN_NAME_ENTRY_ID, id);
values.put(FeedEntry.COLUMN_NAME_TITLE, title);
values.put(FeedEntry.COLUMN_NAME_CONTENT, content);

Yeni satırın birincil anahtar değerini döndürerek yeni satırı ekleyin

long newRowId;
newRowId = db.insert(
     FeedEntry.TABLE_NAME,
     FeedEntry.COLUMN_NAME_NULLABLE,
     values);

SATIRI GÜNCELLE

Sorgunun 'nerede' kısmını tanımlayın.

String selection = FeedEntry.COLUMN_NAME_ENTRY_ID + " LIKE ?";

Bağımsız değişkenleri yer tutucu sırayla belirtin.

String[] selectionArgs = { String.valueOf(rowId) };


SQLiteDatabase db = mDbHelper.getReadableDatabase();

Bir sütun için yeni değer

ContentValues values = new ContentValues();
values.put(FeedEntry.COLUMN_NAME_TITLE, title);

Kimliğe göre hangi satır güncellenecek

String selection = FeedEntry.COLUMN_NAME_ENTRY_ID + " LIKE ?";
String[] selectionArgs = { String.valueOf(rowId) };
    int count = db.update(
    FeedReaderDbHelper.FeedEntry.TABLE_NAME,
    values,
    selection,
    selectionArgs);

Bağlantı verilen web sitesi sorunun cevabını içerse de, cevabınız eksik görünüyor. Bağlantıların süresi dolabilir veya başka bir şekilde kesilebilir. Lütfen yanıtınıza bağlantılı web sitesinden ilgili kodu / bilgileri ekleyin.
Mike

Elbette anlıyorum, tam anlamıyla benim için işe
yarayan

1

Veritabanını işlemek için bu sınıfı kullanıyorum, umarım ileride birine yardımcı olur.

Mutlu kodlamalar.

public class Database {

private static class DBHelper extends SQLiteOpenHelper {

    /**
     * Database name
     */
    private static final String DB_NAME = "db_name";

    /**
     * Table Names
     */
    public static final String TABLE_CART = "DB_CART";


    /**
     *  Cart Table Columns
     */
    public static final String CART_ID_PK = "_id";// Primary key

    public static final String CART_DISH_NAME = "dish_name";
    public static final String CART_DISH_ID = "menu_item_id";
    public static final String CART_DISH_QTY = "dish_qty";
    public static final String CART_DISH_PRICE = "dish_price";

    /**
     * String to create reservation tabs table
     */
    private final String CREATE_TABLE_CART = "CREATE TABLE IF NOT EXISTS "
            + TABLE_CART + " ( "
            + CART_ID_PK + " INTEGER PRIMARY KEY, "
            + CART_DISH_NAME + " TEXT , "
            + CART_DISH_ID + " TEXT , "
            + CART_DISH_QTY + " TEXT , "
            + CART_DISH_PRICE + " TEXT);";


    public DBHelper(Context context) {
        super(context, DB_NAME, null, 2);

    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_TABLE_CART);


    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) {
        db.execSQL("DROP TABLE IF EXISTS " + CREATE_TABLE_CART);
        onCreate(db);
    }

}


     /**
      * CART handler
      */
      public static class Cart {


    /**
     * Check if Cart is available or not
     *
     * @param context
     * @return
     */
    public static boolean isCartAvailable(Context context) {

        DBHelper dbHelper = new DBHelper(context);
        SQLiteDatabase db = dbHelper.getReadableDatabase();
        boolean exists = false;

        try {
            String query = "SELECT * FROM " + DBHelper.TABLE_CART;
            Cursor cursor = db.rawQuery(query, null);
            exists = (cursor.getCount() > 0);
            cursor.close();
            db.close();
        } catch (SQLiteException e) {
            db.close();
        }

        return exists;
    }


    /**
     * Insert values in cart table
     *
     * @param context
     * @param dishName
     * @param dishPrice
     * @param dishQty
     * @return
     */
    public static boolean insertItem(Context context, String itemId, String dishName, String dishPrice, String dishQty) {

        DBHelper dbHelper = new DBHelper(context);
        SQLiteDatabase db = dbHelper.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(DBHelper.CART_DISH_ID, "" + itemId);
        values.put(DBHelper.CART_DISH_NAME, "" + dishName);
        values.put(DBHelper.CART_DISH_PRICE, "" + dishPrice);
        values.put(DBHelper.CART_DISH_QTY, "" + dishQty);

        try {
            db.insert(DBHelper.TABLE_CART, null, values);
            db.close();
            return true;
        } catch (SQLiteException e) {
            db.close();
            return false;
        }
    }

    /**
     * Check for specific record by name
     *
     * @param context
     * @param dishName
     * @return
     */
    public static boolean isItemAvailable(Context context, String dishName) {

        DBHelper dbHelper = new DBHelper(context);
        SQLiteDatabase db = dbHelper.getReadableDatabase();
        boolean exists = false;

        String query = "SELECT * FROM " + DBHelper.TABLE_CART + " WHERE "
                + DBHelper.CART_DISH_NAME + " = '" + String.valueOf(dishName) + "'";


        try {
            Cursor cursor = db.rawQuery(query, null);

            exists = (cursor.getCount() > 0);
            cursor.close();

        } catch (SQLiteException e) {

            e.printStackTrace();
            db.close();

        }

        return exists;
    }

    /**
     * Update cart item by item name
     *
     * @param context
     * @param dishName
     * @param dishPrice
     * @param dishQty
     * @return
     */
    public static boolean updateItem(Context context, String itemId, String dishName, String dishPrice, String dishQty) {

        DBHelper dbHelper = new DBHelper(context);
        SQLiteDatabase db = dbHelper.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(DBHelper.CART_DISH_ID, itemId);
        values.put(DBHelper.CART_DISH_NAME, dishName);
        values.put(DBHelper.CART_DISH_PRICE, dishPrice);
        values.put(DBHelper.CART_DISH_QTY, dishQty);

        try {

            String[] args = new String[]{dishName};
            db.update(DBHelper.TABLE_CART, values, DBHelper.CART_DISH_NAME + "=?", args);

            db.close();


            return true;
        } catch (SQLiteException e) {
            db.close();

            return false;
        }
    }

    /**
     * Get cart list
     *
     * @param context
     * @return
     */
    public static ArrayList<CartModel> getCartList(Context context) {

        DBHelper dbHelper = new DBHelper(context);
        SQLiteDatabase db = dbHelper.getReadableDatabase();

        ArrayList<CartModel> cartList = new ArrayList<>();

        try {
            String query = "SELECT * FROM " + DBHelper.TABLE_CART + ";";

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


            for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {

                cartList.add(new CartModel(
                        cursor.getString(cursor.getColumnIndex(DBHelper.CART_DISH_ID)),
                        cursor.getString(cursor.getColumnIndex(DBHelper.CART_DISH_NAME)),
                        cursor.getString(cursor.getColumnIndex(DBHelper.CART_DISH_QTY)),
                        Integer.parseInt(cursor.getString(cursor.getColumnIndex(DBHelper.CART_DISH_PRICE)))
                ));
            }

            db.close();

        } catch (SQLiteException e) {
            db.close();
        }
        return cartList;
    }

   /**
     * Get total amount of cart items
     *
     * @param context
     * @return
     */
    public static String getTotalAmount(Context context) {

        DBHelper dbHelper = new DBHelper(context);
        SQLiteDatabase db = dbHelper.getReadableDatabase();

        double totalAmount = 0.0;

        try {
            String query = "SELECT * FROM " + DBHelper.TABLE_CART + ";";

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


            for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {

                totalAmount = totalAmount + Double.parseDouble(cursor.getString(cursor.getColumnIndex(DBHelper.CART_DISH_PRICE))) *
                        Double.parseDouble(cursor.getString(cursor.getColumnIndex(DBHelper.CART_DISH_QTY)));
            }

            db.close();


        } catch (SQLiteException e) {
            db.close();
        }


        if (totalAmount == 0.0)
            return "";
        else
            return "" + totalAmount;
    }


    /**
     * Get item quantity
     *
     * @param context
     * @param dishName
     * @return
     */
    public static String getItemQty(Context context, String dishName) {

        DBHelper dbHelper = new DBHelper(context);
        SQLiteDatabase db = dbHelper.getReadableDatabase();

        Cursor cursor = null;
        String query = "SELECT * FROM " + DBHelper.TABLE_CART + " WHERE " + DBHelper.CART_DISH_NAME + " = '" + dishName + "';";
        String quantity = "0";

        try {
            cursor = db.rawQuery(query, null);

            if (cursor.getCount() > 0) {

                cursor.moveToFirst();
                quantity = cursor.getString(cursor
                        .getColumnIndex(DBHelper.CART_DISH_QTY));

                return quantity;
            }


        } catch (SQLiteException e) {
            e.printStackTrace();
        }

        return quantity;
    }


    /**
     * Delete cart item by name
     *
     * @param context
     * @param dishName
     */
    public static void deleteCartItem(Context context, String dishName) {
        DBHelper dbHelper = new DBHelper(context);
        SQLiteDatabase db = dbHelper.getReadableDatabase();

        try {

            String[] args = new String[]{dishName};
            db.delete(DBHelper.TABLE_CART, DBHelper.CART_DISH_NAME + "=?", args);

            db.close();
        } catch (SQLiteException e) {
            db.close();
            e.printStackTrace();
        }

    }


}//End of cart class

/**
 * Delete database table
 *
 * @param context
 */
public static void deleteCart(Context context) {
    DBHelper dbHelper = new DBHelper(context);
    SQLiteDatabase db = dbHelper.getReadableDatabase();

    try {

        db.execSQL("DELETE FROM " + DBHelper.TABLE_CART);

    } catch (SQLiteException e) {
        e.printStackTrace();
    }

}

}

Kullanım:

  if(Database.Cart.isCartAvailable(context)){

       Database.deleteCart(context);

   }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.