Android SQLite 開發教程(4): 讀寫資料庫操作

來源:互聯網
上載者:User

上一篇:http://www.bkjia.com/kf/201205/131948.html

有了資料庫物件之後,可以使用execSQL 提供SQL語言來添加,刪除,修改或查詢資料庫。除了通用的execSQL 之外,SQLiteDatabase 提供了 insert, update, delete ,query 方法來簡化資料庫的添加,刪除,修改或查詢操作。

此外SQLite不強制檢測資料庫的資料類型,通過DBAdapter 可以使用強資料類型來修改,刪除資料等,這也是使用DBAdapter的一個好處:

這裡我們先定義了一個TodoItem 類,表示一個Todo 項:

[java]
public class TodoItem { 
  
 private String mTask; 
  
 private Date mCreated; 
  
 public String getTask(){ 
 return mTask; 
 } 
  
 public Date getCreated(){ 
 return mCreated; 
 } 
  
 public TodoItem(String task){ 
 this(task,new Date(System.currentTimeMillis())); 
 } 
  
 public TodoItem(String task,Date created){ 
 mTask=task; 
 mCreated=created; 
 } 
  
 @Override 
 public String toString(){ 
 SimpleDateFormat sdf=new SimpleDateFormat("dd/mm/yy"); 
 String dateString= sdf.format(mCreated); 
 return "("+ dateString+ ")" + mTask; 
 } 
  

public class TodoItem {
 
 private String mTask;
 
 private Date mCreated;
 
 public String getTask(){
 return mTask;
 }
 
 public Date getCreated(){
 return mCreated;
 }
 
 public TodoItem(String task){
 this(task,new Date(System.currentTimeMillis()));
 }
 
 public TodoItem(String task,Date created){
 mTask=task;
 mCreated=created;
 }
 
 @Override
 public String toString(){
 SimpleDateFormat sdf=new SimpleDateFormat("dd/mm/yy");
 String dateString= sdf.format(mCreated);
 return "("+ dateString+ ")" + mTask;
 }
 
}

下面的方法提供使用TodoItem類型做參數使用添加,刪除和修改TodoItem

[java]
//insert a new task  
public long insertTask(TodoItem task){ 
 ContentValues newTaskValues=new ContentValues(); 
 //assign values for each row  
 newTaskValues.put(KEY_TASK, task.getTask()); 
 newTaskValues.put(KEY_CREATION_DATE, task.getCreated().getTime()); 
  
 //insert row  
 return mDb.insert(DATABASE_TABLE,null,newTaskValues); 

  
public boolean removeTask(long rowIndex){ 
 return mDb.delete(DATABASE_TABLE,KEY_ID+"="+rowIndex, null)>0; 

  
public boolean updateTask(long rowIndex,String task){ 
 ContentValues newValue=new ContentValues(); 
 newValue.put(KEY_TASK, task); 
 return mDb.update(DATABASE_TABLE, newValue, 
 KEY_ID+"="+rowIndex, null)>0; 

//insert a new task
public long insertTask(TodoItem task){
 ContentValues newTaskValues=new ContentValues();
 //assign values for each row
 newTaskValues.put(KEY_TASK, task.getTask());
 newTaskValues.put(KEY_CREATION_DATE, task.getCreated().getTime());
 
 //insert row
 return mDb.insert(DATABASE_TABLE,null,newTaskValues);
}
 
public boolean removeTask(long rowIndex){
 return mDb.delete(DATABASE_TABLE,KEY_ID+"="+rowIndex, null)>0;
}
 
public boolean updateTask(long rowIndex,String task){
 ContentValues newValue=new ContentValues();
 newValue.put(KEY_TASK, task);
 return mDb.update(DATABASE_TABLE, newValue,
 KEY_ID+"="+rowIndex, null)>0;
}
其中ContentValues 定義了列名到列值的映射,類似於Hashtable。

SQLiteDatabase 的Query方法的一個定義如下:

public Cursorquery(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy)

table : 資料庫名稱
columns: 需要返回的列名稱,
selection: 查詢條件,為WHERE語句(不含WHERE)。
selectionArgs: 如果selection 中帶有? ,這裡可以給出? 的替代值。
groupBy: Group 語句除去GROUP BY。
having: Having語句除去Having
OrderBy: Order by 語句。
下面代碼給出查詢某個todoItem 項:

[java]
public Cursor getAllToDoItemsCursor(){ 
 return mDb.query(DATABASE_TABLE, 
 new String[]{KEY_ID,KEY_TASK,KEY_CREATION_DATE}, 
 null, null, null, null, null); 

  
public Cursor setCursorToToDoItem(long rowIndex) 
 throws SQLException { 
 Cursor result=mDb.query(DATABASE_TABLE, 
 new String[]{KEY_ID,KEY_TASK}, 
 KEY_ID+"="+rowIndex, null, null, null, null); 
 if(result.getCount()==0 || !result.moveToFirst()){ 
 throw new SQLException ("No to do item found for row:" 
 + rowIndex); 
 } 
 return result; 

  
public TodoItem getToDoItem(long rowIndex) 
 throws SQLException { 
 Cursor cursor=mDb.query(DATABASE_TABLE, 
 new String[]{KEY_ID,KEY_TASK,KEY_CREATION_DATE}, 
 KEY_ID+"="+rowIndex, null, null, null, null); 
 if(cursor.getCount()==0 || !cursor.moveToFirst()){ 
 throw new SQLException ("No to do item found for row:" 
 + rowIndex); 
 } 
 String task=cursor.getString(TASK_COLUMN); 
 long created=cursor.getLong(CREATION_DATE_COLUMN); 
 TodoItem result=new TodoItem(task,new Date(created)); 
 return result; 
  

public Cursor getAllToDoItemsCursor(){
 return mDb.query(DATABASE_TABLE,
 new String[]{KEY_ID,KEY_TASK,KEY_CREATION_DATE},
 null, null, null, null, null);
}
 
public Cursor setCursorToToDoItem(long rowIndex)
 throws SQLException {
 Cursor result=mDb.query(DATABASE_TABLE,
 new String[]{KEY_ID,KEY_TASK},
 KEY_ID+"="+rowIndex, null, null, null, null);
 if(result.getCount()==0 || !result.moveToFirst()){
 throw new SQLException ("No to do item found for row:"
 + rowIndex);
 }
 return result;
}
 
public TodoItem getToDoItem(long rowIndex)
 throws SQLException {
 Cursor cursor=mDb.query(DATABASE_TABLE,
 new String[]{KEY_ID,KEY_TASK,KEY_CREATION_DATE},
 KEY_ID+"="+rowIndex, null, null, null, null);
 if(cursor.getCount()==0 || !cursor.moveToFirst()){
 throw new SQLException ("No to do item found for row:"
 + rowIndex);
 }
 String task=cursor.getString(TASK_COLUMN);
 long created=cursor.getLong(CREATION_DATE_COLUMN);
 TodoItem result=new TodoItem(task,new Date(created));
 return result;
 
}
Query方法還有幾個重載的方法,具體可以參見Android文檔http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html

 

 

摘自 引路蜂移動軟體

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.