《一》Android 資料庫 SQlite SQLiteOpenHelper

來源:互聯網
上載者:User

 

/*

大家都知道寫部落格會很累的,大熱天的。

希望=轉載請註明出處: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(TABLENAMEnew 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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.