編輯:關於Android編程
、DatabaseHelper類繼承了SQLiteOpenHelper類,並重寫了onCreate和onUngrade方法。
private static class DatabaseHelper extends SQLiteOpenHelper{
DatabaseHelper (Context context){
Super(context,DATABASE_NAME,null,DATABASE_VERSION);
}
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);
}
public void onUpgrade (SQLiteDatabase db,int oldVersion,int newVersion){
}
}
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[] {DB.TEXT1,DB. TEXT2},new int[]{ R.id.list1,R.id.listText2 });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);
}
public void delete(String _id){
SQLiteDatabase db= getWritableDatabase();
db.delete(tbname,
"_id=?",
new String[]{_id});
}
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[]{_id});
}
public Cursor select(){
SQLiteDatabase db = getReadableDatabase();
return db.query(
tbname,
new String[]{"_id","tname","tage","ttel","taddr"},
null,
null, null, null, "_id desc");
}
關於db.query方法的參數,有很多.
參數1:表名
參數2:返回數據包含的列信息,String數組裡放的都是列名
參數3:相當於sql裡的where,sql裡where後寫的內容放到這就行了,例如:tage>?
參數4:如果你在參數3裡寫了?(知道我為什麼寫tage>?了吧),那個這裡就是代替?的值 接上例:new String[]{"30"}
參數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[]{"tname","ttel"},new int[]{R.id.TextView01,R.id.TextView02});
1、效果圖如下:這效果用戶體驗還是很酷炫,今天我們就來講解如何實現這個效果。2、分析為了方便理解,作圖分析如圖所示,整個頁面分為四個部分: &nbs
網上有很多解釋Interpolator屬性的文章,但是基本上都是停留在直接翻譯SDK的意思層面上。Interpolator英文意思是: 篡改者; 分類機;
看到了Android版知乎實現了這種效果,就自己也實現了一下。先來一張效果圖實現方式:方法一:①在onWindowFocusChanged()方法中,設置為刷新狀態為tr
Detecting Common Gestures,一般分為兩個階段:一: Gathering data about touch events.(收集數據)二: Inte