Android 連接數據庫 Android採用關係型數據庫SQLite3,它是一個支持SQL輕量級的嵌入式數據庫,在嵌入式操作上有很廣泛的,WM採用的也是SQLite3 關於過於、原理方面的東西在這篇文章裏不會提到,但是如果你想能夠快速的學會操作SQLite3,那這就是你要找的文章! 首先,我們看一下api,所有數據庫相關的接口、類都在.database和android.database.sqlite兩個包下,雖然只有兩個包,但是如果你英文不好或是太懶的話也要迷茫一段時間,其實,我們真正用的到的沒有幾個! 1、SQLiteOpenHelper (android.database.sqlite.SQLiteOpenHelper) 這是一個抽象類,關於抽象類我們都知道,如果要使用它,一定是繼承它! 這個類的方法很少,有一個構造方法 SQLiteOpenHelper(android.content.Context context, java.lang.String name,android.database.sqlite.SQLiteDatabase.CursorFactory factory, int version); 參數不做過多的解釋,CursorFactory一般直接傳null就可以 public void onCreate(SQLiteDatabase db) 此方法在創建數據庫是被調用,所以,應該把創建表的操作放到這個方法裏面,一會兒在後面我們會再詳細的說如何創建表 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 從方法名上我們就能知道這個方法是執行更新的,沒錯,當version改變是系統會調用這個方法,所以在這個方法裏應該執行刪除現有表,然後手動調用onCreate的操作 SQLiteDatabase getReadableDatabase() 可讀的SQLiteDatabase對象 SQLiteDatabase getWritableDatabase() 獲取可寫的SQLiteDatabase對象 2、SQLiteDatabase(android.database.sqlite.SQLiteDatabase) 關於操作數據庫的工作(增、刪、查、改)都在這個類裏 execSQL(sql) 執行SQL語句,用這個方法+SQL語句可以非常方便的執行增、刪、查、改 除此之外,Android還提供了功過方法實現增、刪、查、改 long insert(TABLE_NAME, null, contentValues)添加記錄 int delete(TABLE_NAME, where, whereValue)刪除記錄 int update(TABLE_NAME, contentValues, where, whereValue) 更新記錄 Cursor query(TABLE_NAME, null, null, null, null, null, null) 查詢記錄 除此之外,還有很多方法,如:beginTransaction()開始事務、endTransaction()結束事務...有興趣的可以自己看api,這裏就不多贅述了 3、Cursor(android.database.Cursor) 遊標(接口),這個很熟悉了吧,Cursor裏的方法非常多,常用的有: boolean moveToPosition(position)將指針移動到某記錄 getColumnIndex(Contacts.People.NAME)按列名獲取id int getCount()獲取記錄總數 boolean requery()重新查詢 boolean isAfterLast()指針是否在末尾 boolean isBeforeFirst()時候是開始位置 boolean isFirst()是否是第一條記錄 boolean isLast()是否是最後一條記錄 boolean moveToFirst()、 boolean moveToLast()、 boolean moveToNext()同moveToPosition(position) 4、SimpleCursorAdapter(android.widget.SimpleCursorAdapter) 也許你會奇怪了,之前我還說過關於數據庫的操作都在database和database.sqlite包下,爲什麼把一個Adapter放到這裏,如果你用過Android的SQLite3,你一定會知道 ,這是因爲我們對數據庫的操作會經常跟列表聯繫起來 經常有朋友會在這出錯,但其實也很簡單 SimpleCursorAdapter adapter = new SimpleCursorAdapter( this, R.layout.list, myCursor, new String[] , new int[]); my.setAdapter(adapter); 一共5個參數,具體如下: 參數1:Content 參數2:佈局 參數3:Cursor遊標對象 參數4:顯示的字段,傳入String[] 參數5:顯示字段使用的組件,傳入int[],該數組中是TextView組件的id 到這裏,關於數據庫的操作就結束了,但是到目前爲止我只做了翻譯的工作,有些同學可能還是沒有掌握,放心,下面我們一起順着正常開發的思路理清一下頭緒! 前面的只是幫沒做過的朋友做下普及,下面纔是你真正需要的! 一、寫一個類繼承SQLiteOpenHelpe public class DatabaseHelper extends SQLiteOpenHelper 構造方法: DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } 在onCreate方法裏寫建表的操作 public void onCreate(SQLiteDatabase db) { String sql = "CREATE TABLE tb_test (_id INTEGER DEFAULT '1' NOT NULL PRIMARY KEY AUTOINCREMENT,class_jb TEXT NOT NULL,class_ysbj TEXT NOT NULL,title TEXT NOT NULL,content_ysbj TEXT NOT NULL)"; db.execSQL(sql);//需要異常捕獲 } 在onUpgrade方法裏刪除現有表,然後手動調用onCtreate創建表 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { String sql = "drop table "+tbname; db.execSQL(sql); onCreate(db); } 對錶增、刪、查、改的方法,這裏用的是SQLiteOpenHelper提供的方法,也可以用sql語句實現,都是一樣的 關於獲取可讀/可寫SQLiteDatabase,我不說大家也應該會想到,只有查找纔會用到可讀的SQLiteDatabase /** * 添加數據 */ public long insert(String tname, int tage, String ttel){ SQLiteDatabase db= getWritableDatabase();//獲取可寫SQLiteDatabase對象 //ContentValues類似map,存入的是鍵值對 ContentValues contentValues = new ContentValues(); contentValues.put("tname", tname); contentValues.put("tage", tage); contentValues.put("ttel", ttel); return db.insert(tbname, null, contentValues); } /** * 刪除記錄 * @param _id */ public void delete(String _id){ SQLiteDatabase db= getWritableDatabase(); db.delete(tbname, "_id=?", new String[]); } /** * 更新記錄的,跟插入的很像 */ public void update(String _id,String tname, int tage, String ttel){ SQLiteDatabase db= getWritableDatabase(); ContentValues contentValues = new ContentValues(); contentValues.put("tname", tname); contentValues.put("tage", tage); contentValues.put("ttel", ttel); db.update(tbname, contentValues, "_id=?", new String[]); } /** * 查詢所有數據 * @return Cursor */ public Cursor select(){ SQLiteDatabase db = getReadableDatabase(); return db.query( tbname, new String[], null, null, null, null, "_id desc"); } 關於db.query方法的參數,有很多,爲了防止大家弄亂,我簡單說一下 參數1:表名 參數2:返回數據包含的列信息,String數組裏放的都是列名 參數3:相當於sql裏的where,sql裏where後寫的內容放到這就行了,例如:tage>? 參數4:如果你在參數3裏寫了?(知道我爲什麼寫tage>?了吧),那個這裏就是代替?的值 接上例:new String[] 參數5:分組,不解釋了,不想分組就傳null 參數6:having,想不起來的看看SQL 參數7:orderBy排序 到這裏,你已經完成了最多的第一步!我們來看看都用到了那些類: SQLiteOpenHelper我們繼承使用的 SQLiteDatabase增刪查改都離不開它,即使你直接用sql語句,也要用到execSQL(sql) 二、這裏無非是對DatabaseHelper類定義方法的調用,沒什麼可說的,不過我還是對查詢再嘮叨幾句吧 Android查詢出來的結果一Cursor形式返回 cursor = sqLiteHelper.select();//是不是很簡單? 查詢出來的cursor一般會顯示在listView中,這就要用到剛纔提到的SimpleCursorAdapter SimpleCursorAdapter adapter = new SimpleCursorAdapter( this, R.layout.list_row, cursor, new String[], new int[] );
android中的listview和cursor的問題
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.