/*
大家都知道寫部落格會很累的,大熱天的。
希望=轉載請註明出處:http://blog.csdn.net/ta893115871
請不要可憐你的滑鼠,(*^__^*) 嘻嘻……
*/
眾所周知,資料庫是很重要的。市面上的大大小小的軟體差不多都要用到資料庫。
在Android中資料庫為SQlite,因為小巧便捷,佔用的空間少,易於操作。使用很受歡迎。
資料庫不外乎查詢(query)新增(insert)修改(update)刪除(delete)。
本例子
1.使用Menu按鍵來做資料庫的查詢(query)新增(insert)修改(update)刪除(delete)。
2.搭配ListView Widget來觸發單擊事件和滑鼠滾輪事件。
下面就看一下資料庫。
首先建一個輔助類MyDataBase繼承SQLiteOpenHelpe,必須實現它的onCreate()和
onUpdate()方法;
資料庫建立時,會調用onCreate()方法,所以可將要添加的表(table)寫在裡面。
建立的方法如下所示:
@Overridepublic void onCreate(SQLiteDatabase db) {// TODO Auto-generated method stub/* 建立表table */Log.i(TAG, " onCreate() ");String sql = "CREATE TABLE " + TABLE_NAME + " (" + FIELD_id+ " INTEGER PRIMARY KEY AUTOINCREMENT," + " " + FIELD_TEXT+ " TEXT)";db.execSQL(sql);}
當更新資料庫時會調用onUpdate()方法。
所以要將更新table的SQL寫在裡面。
//更新資料庫@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {// TODO Auto-generated method stubLog.i(TAG, " onUpgrade() ");//刪除表的SQLString sql = "DROP TABLE IF EXITS " + TABLE_NAME;db.execSQL(sql);onCreate(db);}
2.得到SQLiteDatabasedb對象,
通過db=MyOpenHelper.getReadableDatabase();//得到唯讀資料存放區對象,如果資料庫不存在擇建立一個資料庫
db= MyOpenHelper.getWritableDatabase();//得到可讀可寫的資料哭對象。
如果資料庫不存在擇建立一個資料庫
資料庫的檔案會自行產生在/data/data/package名稱/database下在Eclipse來查詢資料庫是否建立成功。
根據自己的需要選擇不同的方法;
到此我們的資料庫就建立成功了。
(一)查詢:
Cursor cursor=db.query(table,columns,selection,selectionArgs,groupBy,having,orderBy);
返回的是一個遊標對象。
遊標的作用是指項資料庫的表的行我們可以通過 cursor.moveToNext();或者
Cursor.moveToPosition();來控制遊標的位置;
欄位雖然比較多,但瞭解資料庫的人應該很清楚,
第一個參數是表名table_name
第二個參數是要查詢的欄位
第三個參數是查詢的條件
這裡說一下這個查詢條件
查詢所有的資料:
//asc是升序,desc是降序,預設為asc
mSQLiteDatabase.query(TABLENAME,new
String[] {ID,stuName,stuNumber,stuScore
},null,null,null,null,ID+"
asc");
查詢有條件的資料:
Cursor cursor = db.query(TABLENAME,new String[]
{ID,
stuName,
stuNumber,stuScore },"
stuName =?",
new String[] {“zhnagsan”},null,null,null)
這樣寫的話第四個參數就是第三個參數?的替代值。
//Returns A Cursor object, whichis positioned before the first entry
Cursorcur=
mSQLiteDatabase.query(TABLENAME, new String[] {ID,stuName,stuNumber,stuScore
}, stuNumber+"="+number,null,null,null,null);
也可以把第四個參數置空,直接在第三個參數完成資料的查詢條件。
兩種方法都可以。
在完成遊標的產生之後。
如果這個cursor不為空白,擇我們進行查詢的時候要讓遊標移到第一個資料。
Cursor.moveTofirst();
因為遊標預設的是指向第一行資料的上一行,如果我們不指向第一行就會報錯,越界的異常。
(二)增加
// 增加資料public long addMethod(String str) {/* 將新增的值放入ContentValues */ContentValues cv = new ContentValues();cv.put(FIELD_TEXT, str);//索引值對long row = db.insert(TABLE_NAME, null, cv);Log.i(TAG, "addMethod row=" + row);return row;}
第一個參數是你想往哪張表中插入資料的表名。
第二個參數是不允許插入一個完全為空白的一條記錄。
第二個參數是索引值對,封裝在一個ContentValues對象中。
(三)修改
// 修改public void modMethod(int id, String str) {ContentValues values = new ContentValues();values.put(FIELD_TEXT, str);String[] whereArgs = { Integer.toString(id) };int rowsaffected = db.update(TABLE_NAME, values, FIELD_id + " = ?",whereArgs);Log.i(TAG, "modMethod() rowsaffected=" + rowsaffected);}
參數已經很清楚了。
返回的是受影響的行數,是一行還是2行。
(四)刪除
// 刪除public void deleteMethod(int id) {String[] whereArgs = { Integer.toString(id) };int rowsaffected = db.delete(TABLE_NAME, FIELD_id + "=?", whereArgs);Log.i(TAG, "deleteMethod() rowsaffected=" + rowsaffected);}
參數已經很清楚了。
返回的是受影響的行數,是一行還是2行。
(五)關閉資料庫
//關閉資料庫@Overridepublic synchronized void close() {// TODO Auto-generated method stubLog.i(TAG, " close() ");db.close();super.close();}
範例的原始碼見《二》Android 資料庫 SQlite SQLiteOpenHelper