Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 《一》Android 數據庫 SQlite SQLiteOpenHelper

《一》Android 數據庫 SQlite SQLiteOpenHelper

編輯:關於Android編程

 */
眾所周知,數據庫是很重要的。市面上的大大小小的軟件差不多都要用到數據庫。
在Android中數據庫為SQlite,因為小巧便捷,占用的空間少,易於操作。使用很受歡迎。
數據庫不外乎查詢(query)新增(insert)修改(update)刪除(delete)。
本例子
1.使用Menu按鍵來做數據庫的查詢(query)新增(insert)修改(update)刪除(delete)。
2.搭配ListView Widget來觸發單擊事件和鼠標滾輪事件。
下面就看一下數據庫。
首先建一個輔助類MyDataBase繼承SQLiteOpenHelpe,必須實現它的onCreate()和 onUpdate()方法;
數據庫創建時,會調用onCreate()方法,所以可將要添加的表(table)寫在裡面。
創建的方法如下所示:
[java]
@Override 
    public 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寫在裡面。
 
[java]
//更新數據庫 
    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
        // TODO Auto-generated method stub 
        Log.i(TAG, " onUpgrade() "); 
        //刪除表的SQL 
        String 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();
 因為游標默認的是指向第一行數據的上一行,如果我們不指向第一行就會報錯,越界的異常。
(二)增加
[java]
// 增加數據 
    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對象中。
(三)修改
[java] 
// 修改 
    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);   www.2cto.com
        Log.i(TAG, "modMethod() rowsaffected=" + rowsaffected); 
    }<span style="color:black;"> </span> 
參數已經很清楚了。
返回的是受影響的行數,是一行還是2行。
(四)刪除
[java] 
// 刪除 
    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行。
(五)關閉數據庫
[java] 
//關閉數據庫 
    @Override 
    public synchronized void close() { 
        // TODO Auto-generated method stub 
        Log.i(TAG, " close() "); 
        db.close(); 
        super.close(); 
    } 
作者:ta893115871

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved