android
  • sqlite
  • 2016-09-20 22 views 1 likes 
    1

    我正在使用下面的查詢來更新列。現在我想要的只是當它爲空或空時更新這些列。我怎樣才能做到這一點?如何更新列僅在sqlite中爲空?

    db.execSQL("UPDATE FieldTestDataTemp SET 
          Image1 = '" + f10.image1 + "', 
          Image2 = '" + f10.image2 + "', 
          Image3 = '" + f10.image3 + "', 
          Image4 = '" + f10.image4 + "', 
          Image5 = '" + f10.image5 + "', 
          starRating = '" + starRating1 + "' "); 
    
    +0

    你要知道第一哪些領域具有空值 –

    +0

    我已經更新我的查詢。我想在上面的查詢中檢查每一列。 –

    +0

    我不認爲你可以在一個'UPDATE'語句中實現你的邏輯。單個語句將更新所有列,或者不更新所有列。 –

    回答

    1

    在MySQL我們用於使用此查詢

    UPDATE table 
    SET field = 'Your value' 
    WHERE field 
    IS NULL 
    OR LENGTH(field)=0 
    

    您必須設置多個查詢來設置多個列條件。

    1

    你可以通過這樣的參數,將返回你的更新

    public int updateRecords(String table, ContentValues values, 
              String whereClause, String[] whereArgs) { 
         int a = db.update(table, values, whereClause, whereArgs); 
         return a; 
        } 
    

    ,並在這個數據庫記錄數的常用方法是SQLiteDatabase對象

    private SQLiteDatabase db; 
    
    0

    根據OP評論

    我想查這個在上面的查詢每一列。

    如果我理解你正確,你只是想要更新每列只有當這個列是空的。爲此,您需要爲每列運行單獨的查詢。

    0

    Sqlite具有coalesce函數,它接受可變數目的參數並返回第一個不爲空。

    UPDATE field UPDATE FieldTestDataTemp SET Image1 = coalesce(Image1, f10.image1)... 
    

    但是,這不包括空字段的情況,所以你需要進行關於它們(例如設置爲空)。

    使用prepareStatement()/exec()而不是execSQL()也是個好主意。它允許使用佔位符而不是字符串連接。

    0

    可以做單UPDATE並檢查空/空:

    UPDATE FieldTestDataTemp 
    SET Image1 = CASE WHEN Image1 IS NULL OR Image1 = '' 
            THEN f10.image1 
            ELSE Image1 
          END, 
        Image2 = CASE WHEN Image1 IS NULL OR Image2 = '' 
            THEN f10.image2 
            ELSE Image2, 
        ... 
    

    但是,這將更新UPDATE聲明中每一個列,即使基64圖像串已經不爲空而不是空的。

    處理此問題的可能更簡潔的方法是單獨更新每個列。在這種情況下,我們只需要添加一個WHERE條款只更新空/空image字符串:

    UPDATE FieldTestDataTemp 
    SET Image1 = f10.image1 
    WHERE COALESCE(Image1, '') <> '' 
    
    相關問題