SQLite官網:sqlite.org。
### 一、SQLiteOpenHelper類 與 數據庫創建、自動升級
該類是一個抽象類。為了數據庫的升級需要以及使用方便,往往使用該類的子類進行創建、打開、操作數據庫。子類必須實現以下兩個方法。
~~~
public class UesrDB extends SQLiteOpenHelper {
public UesrDB(Context context, String name, CursorFactory factory, int version) {
super(context, name, factory, version);
// TODO Auto-generated constructor stub
}
/*
* 如果數據庫不存在,SQLiteOpenHelper根據上述構造函數的name,
* 在自動創建數據庫之后自動執行OnCreate方法(也僅是在第一次被創建時被調用)。
* 在該方法中一般創建數據庫中的表、視圖等組件。
*/
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
}
/*
* 如果數據庫存在,在上述構造函數中的version表示:數據庫的版本號。
* 如果當前傳遞的版本號比上次創建或升級的數據庫版本號高,就調用onUpgrade方法。
* 在該方法中,首先要刪除原來數據庫的組件,然后創建數據庫中的表、視圖等組件。
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
}
~~~
### 二、SimpleCursorAdapter類 與 數據綁定
該類專門用于數據綁定,數據源是Cursor對象。在數據庫的操作中進程會使用到Cursor對象,該對象封裝了查詢表和查詢視圖返回的結果集。
~~~
SimpleCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to)
~~~
特別注意(1):
在綁定數據時,Cursor對象返回的記錄集中必須包含一個名為“_id”的字段,否則,將無法完成數據綁定。如果沒有“_id”字段,可以將某個唯一索引字段或者主鍵的別名設為"_id"。
特別注意(2):
SQLiteOpenHelper.getReadableDatabase() 和?SQLiteOpenHelper.getWritableDatabase() 這兩個方法獲得的?SQLiteDatabase 對象,系統會在也只能在 手機內存 的/data/data/<package name>/database目錄中創建或者查找數據庫文件。
### 三、操作SD卡上的數據庫
~~~
public SQLiteDatabase openOrCreateDatabase( String path, SQLiteDatabase.CursorFactory factory )
~~~
~~~
public void onClick_SDCard_Database(View view){
String filename=android.os.Environment.getExternalStorageDirectory()+"/sdcard_test.db"; //數據庫文件的存儲路徑
String createTableSQL="create table testUser(" +
"_id autoinc PRIMERY KEY," +
"name varchar(20), " +
"sex TEXT)";
File file=new File(filename);
if(file.exists()){
file.delete();
}
SQLiteDatabase database=SQLiteDatabase.openOrCreateDatabase(filename, null); //打開數據庫
database.execSQL(createTableSQL);
ContentValues values=new ContentValues();
values.put("name","LI");
values.put("sex", "male");
database.insert("testUser", null, values); //(1)SQLiteDatabase的相應方法來操作
String insertSQL="insert into testUser (name,sex) values(?,?)";
database.execSQL(insertSQL,new Object[]{"song","female"});
String selectSQL="select name,sex from testUser where name=?";
Cursor c=database.rawQuery(selectSQL, new String[]{"song"}); //(2)rawQuery直接執行SQL語句
c.moveToFirst();
Toast.makeText(this, c.getString(0)+" "+c.getString(1), Toast.LENGTH_LONG).show();
database.close();
}
~~~
### 四、將數據庫隨應用程序一起發布
### 五、手機ARM中的數據庫
這是內存數據庫。該數據庫只存在于手機ARM中,當程序退出以后,數據庫中的數據會自動釋放。
- 前言
- Java內部類
- 從一個View向一個Activity跳轉
- Android 與 SQLite
- Android工程A依賴B,B依賴C
- Android重要控件概覽(上)
- Installation error: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED
- Android布局概覽
- 動態引用APK文件
- Android重要控件概覽(中)
- Android重要控件概覽(下)
- Gallery和ImageSwitcher
- Android之Toast
- Android之Dialog
- Android之Notification
- Android之Menu
- Android Menu中android:showAsAction屬性
- Android SharedPreferences存儲數據的使用方法
- Android手勢識別之GestureDetector
- 不同APP通過SharedPreferences傳遞數據(共享數據)
- 一個自定義的Topbar模板
- 關于Activity回收造成View選中不對應的問題
- Android之Fragment靜態加載