Android SQLite: Pernyataan Pembaruan

91

Saya perlu menerapkan SQLite di aplikasi saya. Saya mengikuti tutorial ini .. Membuat dan menggunakan database di Android one

Semuanya bekerja dengan baik. Saya memasukkan 1 baris dengan 5 kolom. Sekarang saya ingin memperbarui nilai 1 kolom saja dan yang lainnya akan tetap sama.

Ada satu metode pembaruan dalam tutorial tetapi itu membutuhkan semua parameter, namun saya hanya ingin memperbarui satu kolom.

vivek_Android
sumber
URL yang diminta /index.php/articlesdatastorage/235-creating-and-using-databases-in-android-one tidak ditemukan di server ini.
Machado

Jawaban:

165

Anda dapat menggunakan kode di bawah ini.

String strFilter = "_id=" + Id;
ContentValues args = new ContentValues();
args.put(KEY_TITLE, title);
myDB.update("titles", args, strFilter, null);
Nikhil
sumber
13
Anda bahkan dapat melakukan: myDB.update ("title", args, strFilter, new String [] {Integer.toString (ID)}); jika Anda memiliki strFilter yang disetel ke "_id =?" ... Hal yang mengganggu dengan satu item adalah Anda masih perlu memasukkannya ke dalam array, yang dapat membuatnya tidak nyaman. Tetap saja, Facebook memilih jawaban yang benar.
joshhendo
4
@Dheeraj - Ini hanya akan memperbarui kolom yang ditambahkan ke objek
ContentValues
2
Jika saya tidak salah, kode @joshhendo juga harus mencegah injeksi SQL, sesuatu yang tidak dipertimbangkan oleh jawaban ini. Karena argumen dilewatkan sebagai parameter, ia lolos oleh kode yang mendasarinya.
r41n
Anda perlu memberi tanda kutip di sekitar file Id. Sesuatu seperti:String strFilter = "_id='" + Id + "'";
Guillaume
118

Anda dapat mencoba:

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

Atau

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

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

Atau

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

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

Semuanya ada di tutorial bagaimana melakukan itu:

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

Gunakan ContentValuesuntuk menyetel kolom yang diperbarui dan daripada update()metode yang harus Anda tentukan, tabel dan kriteria untuk hanya memperbarui baris yang ingin Anda perbarui.

Stephan
sumber
-1. Pertanyaannya adalah memperbarui satu kolom berturut-turut, bukan memperbarui seluruh baris. Jawaban Alex benar.
Dheeraj Vepakomma
7
Dheeraj, Anda bisa menambahkan args.put (columnName, newValue) sebanyak yang Anda inginkan.
Simon Rolin
18

Anda selalu dapat menjalankan SQL.

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

sebagai contoh

update Foo set Bar=125
Alex Gitelman
sumber
3
Mengapa menggunakan pernyataan SQL eksplisit, jika ada API (cukup mudah dan nyaman) untuk itu?
Stephan
3
@ Stephan: Karena ini bukan SQLite standar. API terlalu terikat secara khusus ketika DB dibagikan antar aplikasi pada platform yang berbeda
Rafael Nobre
@ Stephan Ini adalah satu-satunya jawaban yang benar untuk pertanyaan tersebut. OP ingin memperbarui satu kolom berturut-turut, bukan untuk memperbarui seluruh baris.
Dheeraj Vepakomma
Menggunakan API adalah taruhan yang lebih baik di sini, saya terkejut tidak ada solusi tengah, pustaka C memungkinkan Anda menentukan SQL untuk dieksekusi dan mengatur pemformatan dan token, langkah selanjutnya adalah menggunakan api C untuk mengikat variabel ke token dalam string SQL, sehingga menghindari kesalahan parsing dan masalah kutipan dll ... di sini hampir terlalu terbantu, bahkan tidak menulis bagian dari SQL, tidak terasa menyenangkan ... tetapi ini kemudian menjadi string SQL yang digabungkan.
Daniel
Metode ini akan gagal jika string berisi tanda kutip tunggal dan beberapa karakter khusus. @Nike jawaban benar.
Cerah
1

Objek SQLiteDatabase bergantung pada jenis operasi pada database.

Informasi lebih lanjut, kunjungi situs resminya:

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

Ini menjelaskan bagaimana memanipulasi konsultasi pada database SQLite.

SISIPKAN BARIS

Mengambil repositori data dalam mode tulis

SQLiteDatabase db = mDbHelper.getWritableDatabase();

Buat peta nilai baru, dengan nama kolom adalah kuncinya

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

Sisipkan baris baru, yang mengembalikan nilai kunci utama dari baris baru

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

PERBARUI BARIS

Tentukan 'di mana' bagian dari kueri.

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

Tentukan argumen dalam urutan placeholder.

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


SQLiteDatabase db = mDbHelper.getReadableDatabase();

Nilai baru untuk satu kolom

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

Baris mana yang akan diperbarui, berdasarkan ID

String selection = FeedEntry.COLUMN_NAME_ENTRY_ID + " LIKE ?";
String[] selectionArgs = { String.valueOf(rowId) };
    int count = db.update(
    FeedReaderDbHelper.FeedEntry.TABLE_NAME,
    values,
    selection,
    selectionArgs);
Gustavo Eduardo Belduma
sumber
Meskipun situs web yang ditautkan mungkin berisi jawaban atas pertanyaan tersebut, jawaban Anda tampaknya tidak lengkap. Tautan dapat kedaluwarsa atau rusak dengan cara lain. Harap tambahkan kode / informasi yang relevan dari situs web yang ditautkan ke jawaban Anda.
Mike
Tentu saja saya mengerti, saya benar-benar meletakkan solusi yang berhasil untuk saya dan tentu saja untuk dugaan sumbernya di mana saya memperoleh
Gustavo Eduardo Belduma
1

Saya menggunakan kelas ini untuk menangani database. Saya berharap ini akan membantu seseorang di masa depan.

Selamat membuat kode.

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

}

}

Pemakaian:

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

       Database.deleteCart(context);

   }
Adnan Bin Mustafa
sumber