SQLITE是android自帶的標準數據庫,它支持SQL語句,是一個輕量級的嵌入式數據庫.
學習SQLITE首先需要瞭解一些知識點:
1. SQLiteDatabase
一個SQLiteDatabase的實例代表一個SQLite的數據庫,通過SQLiteDatabase實例的一些方法,我們可以執行SQL語句,進行對數據庫的增刪改查操作。 數據庫對於一個應用來說是私有的,並且在一個應用當中,名字也是唯一的。
2. SQLiteOpenHelper
這是一個抽象類。當在程序中調用這個類的方法getWritableDatebase()或者getReadableDatebase()方 法的時候,如果當時沒有數據,那麼android系統就會自動生成一個數據庫。對於SQLiteOpenHelper我們通常需要繼承它,並實現它裡面的 3個函數
(1)onCreate
在數據庫第一次生成的時候會調用這個方法,一般我們在這個方法裡邊生成數據庫表
(2)onUpgrade
當數據庫需要升級的時候,Android系統會自動調用這個方法,一般我們在這個方法裡面刪除數據庫表,並建立新的數據庫表。並且還可以根據應用需求進行其它操作。
(3)onOpen
這是當打開數據庫時的回調函數,一般也不會用到。
下面來展示一下操作數據庫的具體代碼
public class ActivityMain extends Activity {
OnClickListener listener1 = null;
OnClickListener listener2 = null;
OnClickListener listener3 = null;
OnClickListener listener4 = null;
OnClickListener listener5 = null;
Button button1;
Button button2;
Button button3;
Button button4;
Button button5;
DatabaseHelper mOpenHelper;
private static final String DATABASE_NAME = "dbForTest.db";
private static final int DATABASE_VERSION = 1;
private static final String TABLE_NAME = "diary";
private static final String TITLE = "title";
private static final String BODY = "body";
private static class DatabaseHelper extends SQLiteOpenHelper {
DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String sql = "CREATE TABLE " + TABLE_NAME + " (" + TITLE
+ " text not null, " + BODY + " text not null " + ");";
System.out.print(sql);
Log.i("haiyang:createDB=", sql);
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
prepareListener();
initLayout();
mOpenHelper = new DatabaseHelper(this);
}
private void initLayout() {
button1 = (Button) findViewById(R.id.button1);
button1.setOnClickListener(listener1);
button2 = (Button) findViewById(R.id.button2);
button2.setOnClickListener(listener2);
button3 = (Button) findViewById(R.id.button3);
button3.setOnClickListener(listener3);
button4 = (Button) findViewById(R.id.button4);
button4.setOnClickListener(listener4);
button5 = (Button) findViewById(R.id.button5);
button5.setOnClickListener(listener5);
}
private void prepareListener() {
listener1 = new OnClickListener() {
public void onClick(View v) {
CreateTable();
}
};
listener2 = new OnClickListener() {
public void onClick(View v) {
dropTable();
}
};
listener3 = new OnClickListener() {
public void onClick(View v) {
insertItem();
}
};
listener4 = new OnClickListener() {
public void onClick(View v) {
deleteItem();
}
};
listener5 = new OnClickListener() {
public void onClick(View v) {
showItems();
}
};
}
private void CreateTable() {
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
String sql = "CREATE TABLE " + TABLE_NAME + " (" + TITLE
+ " text not null, " + BODY + " text not null " + ");";
Log.i("haiyang:createDB=", sql);
try {
db.execSQL("DROP TABLE IF EXISTS diary");
db.execSQL(sql);
setTitle("數據表成功重建");
} catch (SQLException e) {
setTitle("數據表重建錯誤");
}
}
private void dropTable() {
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
String sql = "drop table " + TABLE_NAME;
try {
db.execSQL(sql);
setTitle("數據表成功刪除:" + sql);
} catch (SQLException e) {
setTitle("數據表刪除錯誤");
}
}
private void insertItem() {
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
String sql1 = "insert into " + TABLE_NAME + " (" + TITLE + ", " + BODY
+ ") values('haiyang', 'android的發展真是迅速啊');";
String sql2 = "insert into " + TABLE_NAME + " (" + TITLE + ", " + BODY
+ ") values('icesky', 'android的發展真是迅速啊');";
try {
Log.i("haiyang:sql1=", sql1);
Log.i("haiyang:sql2=", sql2);
db.execSQL(sql1);
db.execSQL(sql2);
setTitle("插入兩條數據成功");
} catch (SQLException e) {
setTitle("插入兩條數據失敗");
}
}
private void deleteItem() {
try {
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
db.delete(TABLE_NAME, " title = 'haiyang'", null);
setTitle("刪除title為haiyang的一條記錄");
} catch (SQLException e) {
}
}
private void showItems() {
SQLiteDatabase db = mOpenHelper.getReadableDatabase();
String col[] = { TITLE, BODY };
Cursor cur = db.query(TABLE_NAME, col, null, null, null, null, null);
Integer num = cur.getCount();
setTitle(Integer.toString(num) + " 條記錄");
}
}
在上述代碼中
DataBaseHelper類繼承瞭SQLieOpenHelper類,並且重寫瞭onCreate和onUpgrade方法。
在onCreate方法中我們首先構造瞭一條SQL語句,然後調用瞭db.execSQL(sql)執行SQL語句。生成瞭一個表
因為目前我們還不需要升級數據庫,所以我們在onUpgrade()函數裡面沒有執行任何操作。
==============================================================================================
下面對應的就是增刪改查方法
主要說下查的方法:
如前面知識點所說,先創建一個SQLiteDatebase的對象,得到一個可寫的數據庫.
Sring col[]={TITLE,BODY};
SQLiteDatabase db = mOpenHelper.getReadableDatabase();
Cursor cur = db.query(TABLE_NAME, col, null, null, null, null, null);
這條語句將查詢到的數據放到一個Cursor中。這個Cursor中封裝瞭這個數據表TABLE_NAME當中的所有條列。下面具體說下query()方法:
第一個參數是數據庫裡邊表的名字。
第二個參數是我們想要返回數據包含的列的信息。如上面代碼所示 我們把列名存放在名為col的數組裡
第三個參數為selection,相當於SQL語句的where部分,如果想返回所有的數據,那麼就直接設置為null.
第四個參數為selectionArgs.在selection部分,有可能用到"?",那麼在selectionArgs定義的字符串會代替selection中的"?".
第五個參數為groupBy。定義查詢出來的數據是否分組,如果為null,則說明不需要分組。
第六個參數為having。相當於SQL語句當中的having部分。
第七個參數為orderBy。這個就是排序。
最後 Integer num=cur.getCount()語句通過getCount()方法,可以得到Cursor當中數據的個數。
對於Cursor的理解:
Cursor本身是指針的意思。在android中是一個非常有用的接口,通過Cursor我們可以對從數據庫查詢出來的結果集進行隨機的讀寫訪問。
一個簡單的對數據庫操作的demo介紹完瞭,最後需要說明的是 在Android的設計哲學裡鼓勵開發者使用內部類,這樣不但使用方便,而且執行效率也高。
本文出自“haiyang08101”