一.基礎知識:
1.SQLite的數據類型:
NULL:空值。
INTEGER:帶符號的整型,具體取決有存入數字的范圍大小。
REAL:浮點數字,存儲為8-byte IEEE浮點數。
TEXT:字符串文本。
BLOB:二進制對象。
smallint 16位元的整數。
interger 32位元的整數。
decimal(p,s) p 精確值和 s 大小的十進位整數,精確值p是指全部有幾個數(digits)大小值,s是指小數點後有幾位數。如果沒有特別指定,則系統會設為 p=5; s=0 。
float 32位元的實數。
double 64位元的實數。
char(n) n 長度的字串,n不能超過 254。
varchar(n) 長度不固定且其最大長度為 n 的字串,n不能超過 4000。
graphic(n) 和 char(n) 一樣,不過其單位是兩個字元 double-bytes, n不能超過127。這個形態是為了支援兩個字元長度的字體,例如中文字。
vargraphic(n) 可變長度且其最大長度為 n 的雙字元字串,n不能超過 2000
date 包含了 年份、月份、日期。
time 包含了 小時、分鐘、秒。
timestamp 包含了 年、月、日、時、分、秒、千分之一秒。
datetime 包含日期時間格式,必須寫成'2010-08-05'不能寫為'2010-8-5',否則在讀取時會產生錯誤!
2.SQLite的基本操作:
①SQLiteOpenHelper 抽象類:通過從此類繼承實現用戶類,來提供數據庫打開、關閉等操作函數。
[java]
// 創建數據庫
public void onCreate(SQLiteDatabase db)
// 更新數據庫
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
// 打開數據庫
public void onOpen(SQLiteDatabase db)
// 得到一個可讀SQLiteDatabase對象
public synchronized SQLiteDatabase getReadableDatabase()
// 得到一個可寫SQLiteDatabase對象
public synchronized SQLiteDatabase getWriteableDatabase()
// 創建數據庫
public void onCreate(SQLiteDatabase db)
// 更新數據庫
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
// 打開數據庫
public void onOpen(SQLiteDatabase db)
// 得到一個可讀SQLiteDatabase對象
public synchronized SQLiteDatabase getReadableDatabase()
// 得到一個可寫SQLiteDatabase對象
public synchronized SQLiteDatabase getWriteableDatabase()
②SQLiteDatabase 數據庫訪問類:執行對數據庫的插入記錄、查詢記錄等操作。
[java]
execSQL()方法可以執行insert、delete、update和CREATE TABLE之類有更改行為的SQL語句;
rawQuery()方法可以執行select語句。
query(table, columns, selection, selectionArgs, groupBy, having, orderBy, limit)
table:表名。相當於select語句from關鍵字後面的部分。如果是多表聯合查詢,可以用逗號將兩個表名分開。
columns:要查詢出來的列名。相當於select語句select關鍵字後面的部分。
selection:查詢條件子句,相當於select語句where關鍵字後面的部分,在條件子句允許使用占位符“?”
selectionArgs:對應於selection語句中占位符的值,值在數組中的位置與占位符在語句中的位置必須一致,否則就會有異常。
groupBy:相當於select語句group by關鍵字後面的部分
having:相當於select語句having關鍵字後面的部分
orderBy:相當於select語句order by關鍵字後面的部分,如:personid desc, age asc;
limit:指定偏移量和獲取的記錄數,相當於select語句limit關鍵字後面的部分。
//還有兩個,網上貌似都用的比較少,而我們這個例子中采用的是這些:
public long insert(
String table, // 待插入的表名
String nullColumnHack, // 通常設置為null
ContentValues values // 待插入的數據
)
public int update(
String table, // 待更新的表名
ContentValues values, // 待更新的內容
String whereClause, // 選擇通過哪個字段來更新
String [] whereArgs // 為whereClause字段要查詢的值
)
execSQL()方法可以執行insert、delete、update和CREATE TABLE之類有更改行為的SQL語句;
rawQuery()方法可以執行select語句。
query(table, columns, selection, selectionArgs, groupBy, having, orderBy, limit)
table:表名。相當於select語句from關鍵字後面的部分。如果是多表聯合查詢,可以用逗號將兩個表名分開。
columns:要查詢出來的列名。相當於select語句select關鍵字後面的部分。
selection:查詢條件子句,相當於select語句where關鍵字後面的部分,在條件子句允許使用占位符“?”
selectionArgs:對應於selection語句中占位符的值,值在數組中的位置與占位符在語句中的位置必須一致,否則就會有異常。
groupBy:相當於select語句group by關鍵字後面的部分
having:相當於select語句having關鍵字後面的部分
orderBy:相當於select語句order by關鍵字後面的部分,如:personid desc, age asc;
limit:指定偏移量和獲取的記錄數,相當於select語句limit關鍵字後面的部分。
//還有兩個,網上貌似都用的比較少,而我們這個例子中采用的是這些:
public long insert(
String table, // 待插入的表名
String nullColumnHack, // 通常設置為null
ContentValues values // 待插入的數據
)
public int update(
String table, // 待更新的表名
ContentValues values, // 待更新的內容
String whereClause, // 選擇通過哪個字段來更新
String [] whereArgs // 為whereClause字段要查詢的值
)
③下面為網上常用的訪問數據庫的一般流程:
[java]
public void onClick(View v) {
DatabaseHelper databaseHelper = new DatabaseHelper(HelloActivity.this);
SQLiteDatabase db = databaseHelper.getWritableDatabase();
db.execSQL("insert into person(name, age) values(?,?)", new Object[]{"傳智播客", 4});
db.close();
};
public void onClick(View v) {
DatabaseHelper databaseHelper = new DatabaseHelper(HelloActivity.this);
SQLiteDatabase db = databaseHelper.getWritableDatabase();
db.execSQL("insert into person(name, age) values(?,?)", new Object[]{"傳智播客", 4});
db.close();
};
二.編程實現:
1. 界面編輯(reslayoutmain.xml):
[java]
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
android:text="創建數據庫"
android:id="@+id/ButtonCreate"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
android:text="增加數據"
android:id="@+id/ButtonInsert"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
android:text="更新數據"
android:id="@+id/ButtonUpdate"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
android:text="查詢數據"
android:id="@+id/ButtonQuery"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_par