一、 SQLite介紹
SQLite是android內置的一個很小的關系型數據庫。
SQLite的官網是http://www.sqlite.org/,可以去下載一些文檔或相關信息。
博客中有一篇有稍微詳細一點的介紹,大家可以去看一下。
二、 SQLiteOpenHelper的使用方法
SQLiteOpenHelper是一個輔助類來管理數據庫的創建和版本。
可以通過繼承這個類,實現它的一些方法來對數據庫進行一些操作。
所有繼承了這個類的類都必須實現下面這樣的一個構造方法:
public DatabaseHelper(Context context, String name, CursorFactory factory, int version)
第一個參數:Context類型,上下文對象。
第二個參數:String類型,數據庫的名稱
第三個參數:CursorFactory類型
第四個參數:int類型,數據庫版本
下面是這個類的幾個方法:
方法名 返回類型 描述 備注
getReadableDatabase() synchronized SQLiteDatabase 創建或打開一個數據庫 可以通過這兩個方法返回的SQLiteDatabase對象對數據庫進行一系列的操作,如新建一個表,插入一條數據等
getWritableDatabase() synchronized SQLiteDatabase 創建或打開一個可以讀寫的數據庫
onCreate(SQLiteDatabase db) abstract void 第一次創建的時候調用
onOpen(SQLiteDatabase db) void 打開數據庫
onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion) abstract void 升級數據庫
close() synchronized void 關閉所有打開的數據庫對象
SQLiteOpenHelper類:
package android.sqlite; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.database.sqlite.SQLiteDatabase.CursorFactory; /** * SQLiteOpenHelper是一個輔助類,用來管理數據庫的創建和版本他,它提供兩個方面的功能 * 第一,getReadableDatabase()、getWritableDatabase()可以獲得SQLiteDatabase對象,通過該對象可以對數據庫進行操作 * 第二,提供了onCreate()、onUpgrade()兩個回調函數,允許我們再創建和升級數據庫時,進行自己的操作 */ public class DatabaseHelper extends SQLiteOpenHelper { private static final int VERSION = 1; /** * 在SQLiteOpenHelper的子類當中,必須有該構造函數 * @param context 上下文對象 * @param name 數據庫名稱 * @param factory * @param version 當前數據庫的版本,值必須是整數並且是遞增的狀態 */ public DatabaseHelper(Context context, String name, CursorFactory factory, int version) { //必須通過super調用父類當中的構造函數 super(context, name, factory, version); } public DatabaseHelper(Context context, String name, int version){ this(context,name,null,version); } public DatabaseHelper(Context context, String name){ this(context,name,VERSION); } //該函數是在第一次創建的時候執行,實際上是第一次得到SQLiteDatabase對象的時候才會調用這個方法 @Override public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub System.out.println("create a database"); //execSQL用於執行SQL語句 db.execSQL("create table user(id int,name varchar(20))"); } @Override public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) { // TODO Auto-generated method stub System.out.println("upgrade a database"); } }
Activity類:
package android.sqlite; import android.app.Activity; import android.content.ContentValues; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class SQLiteActivity extends Activity { /** Called when the activity is first created. */ private Button createDatabaseButton = null; private Button updateDatabaseButton = null; private Button insertButton = null; private Button updateButton = null; private Button selectButton = null; private Button deleteButton = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 根據控件id獲得相應的控件對象 createDatabaseButton = (Button) findViewById(R.id.createDatabase); updateDatabaseButton = (Button) findViewById(R.id.updateDatabase); insertButton = (Button) findViewById(R.id.insert); updateButton = (Button) findViewById(R.id.update); selectButton = (Button) findViewById(R.id.select); deleteButton = (Button) findViewById(R.id.delete); // 為按鈕設置監聽器 createDatabaseButton .setOnClickListener(new CreateDatabaseOnClickListener()); updateDatabaseButton .setOnClickListener(new UpdateDatabaseOnClickListener()); insertButton.setOnClickListener(new InsertOnClickListener()); updateButton.setOnClickListener(new UpdateOnClickListener()); selectButton.setOnClickListener(new SelectOnClickListener()); deleteButton.setOnClickListener(new DeleteOnClickListener()); } // createDatabaseButton點擊事件監聽器 class CreateDatabaseOnClickListener implements OnClickListener { public void onClick(View v) { // 創建了一個DatabaseHelper對象,只執行這句話是不會創建或打開連接的 DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this, "test_yangyz_db"); // 只有調用了DatabaseHelper的getWritableDatabase()方法或者getReadableDatabase()方法之后,才會創建或打開一個連接 SQLiteDatabase sqliteDatabase = dbHelper.getReadableDatabase(); } } // updateDatabaseButton點擊事件監聽器 class UpdateDatabaseOnClickListener implements OnClickListener { public void onClick(View v) { // TODO Auto-generated method stub DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this, "test_yangyz_db", 2); // 得到一個只讀的SQLiteDatabase對象 SQLiteDatabase sqliteDatabase = dbHelper.getReadableDatabase(); } } // insertButton點擊事件監聽器 class InsertOnClickListener implements OnClickListener { public void onClick(View v) { // 創建ContentValues對象 ContentValues values = new ContentValues(); // 向該對象中插入鍵值對,其中鍵是列名,值是希望插入到這一列的值,值必須和數據庫當中的數據類型一致 values.put("id", 1); values.put("name", "yangyz"); // 創建DatabaseHelper對象 DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this, "test_yangyz_db", 2); // 得到一個可寫的SQLiteDatabase對象 SQLiteDatabase sqliteDatabase = dbHelper.getWritableDatabase(); // 調用insert方法,就可以將數據插入到數據庫當中 // 第一個參數:表名稱 // 第二個參數:SQl不允許一個空列,如果ContentValues是空的,那么這一列被明確的指明為NULL值 // 第三個參數:ContentValues對象 sqliteDatabase.insert("user", null, values); } } // updateButton點擊事件監聽器 class UpdateOnClickListener implements OnClickListener { public void onClick(View v) { // 創建一個DatabaseHelper對象 DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this, "test_yangyz_db", 2); // 得到一個可寫的SQLiteDatabase對象 SQLiteDatabase sqliteDatabase = dbHelper.getWritableDatabase(); // 創建一個ContentValues對象 ContentValues values = new ContentValues(); values.put("name", "zhangsan"); // 調用update方法 // 第一個參數String:表名 // 第二個參數ContentValues:ContentValues對象 // 第三個參數String:where字句,相當於sql語句where后面的語句,?號是占位符 // 第四個參數String[]:占位符的值 sqliteDatabase.update("user", values, "id=?", new String[] { "1" }); System.out.println("-----------update------------"); } } // selectButton點擊事件監聽器 class SelectOnClickListener implements OnClickListener { public void onClick(View v) { String id = null; String name = null; //創建DatabaseHelper對象 DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this, "test_yangyz_db", 2); // 得到一個只讀的SQLiteDatabase對象 SQLiteDatabase sqliteDatabase = dbHelper.getReadableDatabase(); // 調用SQLiteDatabase對象的query方法進行查詢,返回一個Cursor對象:由數據庫查詢返回的結果集對象 // 第一個參數String:表名 // 第二個參數String[]:要查詢的列名 // 第三個參數String:查詢條件 // 第四個參數String[]:查詢條件的參數 // 第五個參數String:對查詢的結果進行分組 // 第六個參數String:對分組的結果進行限制 // 第七個參數String:對查詢的結果進行排序 Cursor cursor = sqliteDatabase.query("user", new String[] { "id", "name" }, "id=?", new String[] { "1" }, null, null, null); // 將光標移動到下一行,從而判斷該結果集是否還有下一條數據,如果有則返回true,沒有則返回false while (cursor.moveToNext()) { id = cursor.getString(cursor.getColumnIndex("id")); name = cursor.getString(cursor.getColumnIndex("name")); } System.out.println("-------------select------------"); System.out.println("id: "+id); System.out.println("name: "+name); } } // deleteButton點擊事件監聽器 class DeleteOnClickListener implements OnClickListener { public void onClick(View v) { //創建DatabaseHelper對象 DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_yangyz_db",2); //獲得可寫的SQLiteDatabase對象 SQLiteDatabase sqliteDatabase = dbHelper.getWritableDatabase(); //調用SQLiteDatabase對象的delete方法進行刪除操作 //第一個參數String:表名 //第二個參數String:條件語句 //第三個參數String[]:條件值 sqliteDatabase.delete("user", "id=?", new String[]{"1"}); System.out.println("----------delete----------"); } } }
布局文件:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <Button android:id="@+id/createDatabase" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/createDatabaseButton" /> <Button android:id="@+id/updateDatabase" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/updateDatabaseButton" /> <Button android:id="@+id/insert" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/insertButton" /> <Button android:id="@+id/update" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/updateButton" /> <Button android:id="@+id/select" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/selectButton" /> <Button android:id="@+id/delete" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/deleteButton" /> </LinearLayout>
String文件:
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hello World, SQLiteActivity!</string> <string name="app_name">SQLiteTest</string> <string name="createDatabaseButton">createDatabase</string> <string name="updateDatabaseButton">updateDatabase</string> <string name="insertButton">insert</string> <string name="updateButton">update</string> <string name="selectButton">select</string> <string name="deleteButton">delete</string> </resources>