Android SQLite : 업데이트 문


91

내 응용 프로그램에서 SQLite를 구현해야합니다. 나는이 튜토리얼을 따랐다 .. 안드로이드 원에서 데이터베이스 생성 및 사용

모든 것이 잘 작동합니다. 5 열이있는 행 1 개를 삽입했습니다. 이제 1 열의 값만 업데이트하고 나머지는 동일하게 유지합니다.

튜토리얼에는 하나의 업데이트 방법이 있지만 모든 매개 변수가 필요하지만 하나의 열만 업데이트하고 싶습니다.


요청 된 URL /index.php/articlesdatastorage/235-creating-and-using-databases-in-android-one을이 서버에서 찾을 수 없습니다.
Machado

답변:


165

아래 코드를 사용할 수 있습니다.

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

13
다음과 같이 할 수도 있습니다. myDB.update ( "titles", args, strFilter, new String [] {Integer.toString (ID)}); strFilter를 "_id =?"로 설정 한 경우 ... 단일 항목의 성가신 점은 여전히 ​​배열에 넣어야하므로 불편할 수 있습니다. 그래도 정답에 투표했습니다.
joshhendo

4
@Dheeraj-이것은 ContentValues ​​개체에 추가 된 열만 업데이트합니다
Simonw

2
내가 틀리지 않다면 @joshhendo의 코드는 SQL 주입을 방지해야 하며이 답변은 고려하지 않습니다. 인수는 매개 변수로 전달되므로 기본 코드에 의해 이스케이프됩니다.
r41n 2014

주위에 따옴표를 넣어야합니다 Id. 같은 것 :String strFilter = "_id='" + Id + "'";
Guillaume

119

당신은 시도 할 수 있습니다:

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

또는

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

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

또는

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

이를 수행하는 방법은 모두 튜토리얼에 있습니다.

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

사용하여 ContentValues업데이트 된 열과보다 설정 update()만 업데이트 할 행을 업데이트하려면 명시한다, 테이블과 기준을 가지고하는 방법.


-1. 문제는 전체 행을 업데이트하는 것이 아니라 행의 단일 열을 업데이트하는 것입니다. Alex의 대답 이 맞습니다.
Dheeraj Vepakomma

7
Dheeraj, 원하는만큼 args.put (columnName, newValue)를 추가 할 수 있습니다.
Simon Rolin

18

항상 SQL을 실행할 수 있습니다.

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

예를 들면

update Foo set Bar=125

3
(매우 쉽고 편리한) API가 있다면 명시적인 SQL 문을 사용하는 이유는 무엇입니까?
Stephan

3
@Stephan : 표준 SQLite가 아니기 때문입니다. API는 DB가 서로 다른 플랫폼의 앱간에 공유 될 때 특히 너무 많이 연결됩니다.
Rafael Nobre

@Stephan 이것은 질문에 대한 유일한 정답입니다. OP는 전체 행을 업데이트하지 않고 행의 단일 열을 업데이트하려고합니다.
Dheeraj Vepakomma

API를 사용하는 것이 더 좋은 방법입니다. 중간 솔루션이 없다는 것에 놀랐습니다. C 라이브러리를 사용하면 SQL을 정의하여 포맷터와 토큰을 실행하고 설정할 수 있습니다. 다음 단계는 C API를 사용하여 변수를 SQL 문자열에 토큰을 사용하여 구문 분석 오류 및 인용 문제 등을 피할 수 있습니다. 여기에서는 거의 도움이되고 SQL의 일부도 작성하지 않고 기분이 좋지 않습니다. 오히려 이것은 연결된 SQL 문자열입니다.
Daniel

이 메서드는 문자열에 작은 따옴표와 일부 특수 문자가 포함 된 경우 실패합니다. @Nike 대답이 맞습니다.
Sunny

1

SQLiteDatabase 개체는 데이터베이스의 작업 유형에 따라 다릅니다.

자세한 내용은 공식 웹 사이트를 방문하십시오.

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

SQLite 데이터베이스에서 상담을 조작하는 방법을 설명합니다.

행 삽입

쓰기 모드에서 데이터 저장소를 가져옵니다.

SQLiteDatabase db = mDbHelper.getWritableDatabase();

열 이름이 키인 새 값 맵을 만듭니다.

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

새 행을 삽입하고 새 행의 기본 키 값을 반환합니다.

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

행 업데이트

쿼리의 'where'부분을 정의합니다.

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

자리 표시 자 순서로 인수를 지정합니다.

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


SQLiteDatabase db = mDbHelper.getReadableDatabase();

하나의 열에 대한 새 값

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

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

링크 된 웹 사이트에 질문에 대한 답변이 포함되어있을 수 있지만 답변이 불완전한 것 같습니다. 링크는 다른 방식으로 만료되거나 끊어 질 수 있습니다. 링크 된 웹 사이트의 관련 코드 / 정보를 답변에 추가하십시오.
Mike

본인은 물론, 난 그냥 그대로 내가 얻은 곳 나를 위해 그 주장 소스 물론 근무 솔루션 넣어
구스타보 에두아르도 Belduma

1

저는이 클래스를 사용하여 데이터베이스를 처리합니다. 나중에 도움이되기를 바랍니다.

즐거운 코딩입니다.

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

}

}

용법:

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

       Database.deleteCart(context);

   }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.