2017-04-17 39 views

回答

1

執行插入,讀取,刪除,更新操作有兩種不同的方式:

  1. 寫參數化查詢(推薦)
  2. 寫入原始查詢

參數化查詢:這些是那些使用內置函數執行插入,讀取,刪除或更新數據的查詢。這些操作相關的功能在SQLiteDatabase類中提供。

原始查詢:這些都是簡單的SQL查詢類似於其他的數據庫如MySQL,SQL服務器等,在這種情況下,用戶將不得不編寫查詢文本,並通過查詢字符串中rawQuery(String sql,String [] selectionArgs)execSQL(String sql,Object [] bindArgs)方法來執行操作。

重要提示:Android文檔不建議使用原始的查詢執行插入,讀取,更新,刪除等操作,始終使用SQLiteDatabase類的插入,查詢,更新,刪除等功能。

以下是插入原始查詢的示例數據:

public void insertItem(Item item) { 
    String query = "INSERT INTO " + ItemTable.NAME + " VALUES (0,?,?)"; 
    SQLiteDatabase db = getWritableDatabase(); 
    db.execSQL(query, new String[]{item.name, item.description}); 
    db.close(); 
} 

雖然使用原始的查詢,我們永遠不會知道操作的結果,但與參數化查詢功能是返回一個值的成功或失敗操作。

插入:要使用parameterized query執行插入操作,我們必須調用SQLiteDatabase類中可用的插入函數。 insert()函數有三個參數,如public long insert(String tableName,String nullColumnHack,ContentValues values)其中tableName是要在其中插入數據的表的名稱。

下面是簡單的例子:

//Item is a class representing any item with id, name and description. 
public void addItem(Item item) { 
    SQLiteDatabase db = getWritableDatabase(); 
    ContentValues contentValues = new ContentValues(); 
    contentValues.put("name",item.name); 
    // name - column 
    contentValues.put("description",item.description); 
    // description is column in items table, item.description has value for description 
    db.insert("Items", null, contentValues);//Items is table name 
    db.close(); 
} 

欲瞭解更多信息,請參閱本Link

+0

這個答案是錯誤的: 'rawQuery'和'execSQL'可以參數化;這是'selectionArgs' /'bindArgs'的用途。 –

+0

我從來沒有說'原始查詢'不能參數化!還添加了函數定義'rawQuery(String sql,String [] selectionArgs)','execSQL(String sql,Object [] bindArgs)'...在答案 – rafsanahmad007

+0

「參數化查詢」是帶有參數的查詢,所以這個名稱會更好地適應其他功能('insert'甚至不使用參數*顯式*)。您應該對這些功能使用更好的描述。 –

相關問題