2017-02-13 162 views
0

我試圖從數組中的數據庫中獲取值或數據。從數組中獲取數據庫中的特定值

public Cursor checkExistence(){ 
     Cursor c=null; 
     String[] values={"headache","cold"}; 
     SQLiteDatabase db= getReadableDatabase(); 
     String query="SELECT * FROM "+TABLE_SYMPTOMS+" WHERE "+COLUMN_SYMP+" IN ("+toArrayRep(values)+")"; 
     c=db.rawQuery(query,null); 
     Log.i("From Cursor","Cursor Count : " + c.getCount()); 
     if(c.getCount()>0){ 
      String val= c.getString() 
      Log.i("From Cursor","No insertion"); 
     }else{ 
      Log.i("From Cursor","Insertion"); 
     } 
     db.close(); 
     return c; 
    } 



public static String toArrayRep(String[] in) { 
    StringBuilder result = new StringBuilder(); 
    for (int i = 0; i < in.length; i++) { 
     if (i != 0) { 
      result.append(","); 
     } 
     result.append("'" + in[i] + "'"); 
    } 
    return result.toString(); 
} 

String values={"headache","cold"}中,頭痛存在但數據庫中不存在冷。從上面的代碼,光標返回Count=1這是count>0,因此我不能插入到table.I想知道我可以獨立檢查是否存在單個數據,並且不存在的將插入到表中因此,在這種情況下,「冷」將能夠插入到表格中。

+0

對於你的邏輯,'c.getCount()== values.length' - >所有記錄在數據庫中。如果c.getCount()小於values.length,那麼一些記錄不在db中。雖然,沒有邏輯,你可以做唯一插入1 sql:http://stackoverflow.com/questions/2779823/sqlite-query-to-insert-a-record-if-not-exists – Emma

回答

1

如果您使用單個查詢來檢查所有值,那麼您得到的是現有值的列表,並且您仍然必須在原始列表中搜索任何差異。

這是簡單檢查每個單獨的值:

String[] values = { "headache", "cold" }; 
SQLiteDatabase db = getReadableDatabase(); 

db.beginTransaction(); 
try { 
    for (String value : values) { 
     long count = DatabaseUtils.queryNumEntries(db, 
       TABLE_SYMPTOMS, COLUMN_SYMP+" = ?", new String[] { value }); 
     if (count == 0) { 
      ContentValues cv = new ContentValues(); 
      cv.put(COLUMN_SYMP, value); 
      db.insert(TABLE_SYMPTOMS, null, cv); 
     } 
    } 
    db.setTransactionSuccessful(); 
} finally { 
    db.endTransaction(); 
} 
+0

感謝@CL,它的工作 – mcprilla79

0

您需要檢查光標。 moveToFirst()在光標

  • =有記錄。
  • 錯誤 =沒有記錄。

示例我的代碼:

return database.query(table.getNameTable(), 
         table.getColumns(), 
         table.getWhereSelectTableScript(), 
         null, 
         table.getGroupBySelectTableScript(), 
         table.getHavingSelectTableScript(), 
         table.getOrderBySelectTableScript(), 
         table.getLimitRecordsSelectTableScript()); 

查看更多here

+0

抱歉,但不會幫助,我想通過'count = 0'得到值,它顯示它不在數據庫中的值。感謝您的幫助,雖然 – mcprilla79