標籤:
停更了一天,I‘m back again~~當我們需要操作大量的資料時,我們首先想到的當然是資料庫,因為可以通過簡單的語句實現資料的增刪改查,在Android中,我們不使用SQL或者ORACLE,我們使用SQLite,因為它佔用資源更少,而語句格式與SQL語句一樣。
首先,我們來在Android中實現資料庫的建立與增刪改查,引用資料庫的類時,不再繼承常用的Activity類,而是繼承Android中的SQLiteOpenHelper,建立一個構造方法,四個參數分別是(Context context, String name, SQLiteDatabase.CursorFactory factory,int version),下面我們來分別解釋一下這四個參數,context代表上下文環境,大多情況是上下文環境就是activity,name是資料庫的名字,通常我們寫成"xxx.db",這樣方便知道我們建立的是一個資料庫,cursor代表指標,在預設為null時,它表示初始為-1,然後依次指向資料庫的每一行,我們可以利用cursor來掃描資料庫,有條件的掃描就是尋找,version代表版本號碼,只要設定大於等於1的值即可。在資料庫類中一定要調用兩個方法,即onCreate()與onUpdate()方法,傳進來的參數都是資料庫物件,它們分別在資料庫被建立與資料庫被更新時調用,在資料庫被建立時建立表,直接調用執行資料庫語句方法execSQL(String),代碼如下:
package com.administrator.sqlite;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;import android.provider.Settings;/** * Created by Administrator on 2016/7/22. */public class MyOpenHelper extends SQLiteOpenHelper { //構造方法,new時會調用,cursor:封裝資料庫查詢時返回的資料,初始為-1.依次向下讀取下一行資料,null使用預設遊標 public MyOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory,int version){ super(context,name,factory,version); } //資料庫建立時,此方法會調用 //建立資料庫的同時建立表 @Override public void onCreate(SQLiteDatabase db) { String sql="create table student(number char(4) primary key,name char(4),age char(1))"; db.execSQL(sql); } //資料庫升級時,此方法會調用 @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { System.out.println("資料庫被升級了"); }}
下面我們用單元測試方法來實現一下資料庫的增刪改查,寫在ApplicationTest中,首先我們定義一個MyOpenHelper的對象,此時我們在測試,沒有任何前台任務,所以此時沒有正在執行的Activity,Android為我們提供了getContext()方法,用來在沒有上下文環境中為我們建立一個虛擬上下文環境。接下來我們調用getReadableDatabase()來建立或開啟一個資料庫(如果沒有,我們就建立一個資料庫,如果有,我們就開啟這個資料庫),對資料的增刪改操作,就是建立好一個資料庫後執行相應的SQL語句,最後關閉資料庫。代碼如下:
package com.administrator.sqlite;import android.app.Application;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.test.ApplicationTestCase;/** * <a href="http://d.android.com/tools/testing/testing_android.html">Testing Fundamentals</a> */public class ApplicationTest extends ApplicationTestCase<Application> { public ApplicationTest() { super(Application.class); } public void testInsert(){ MyOpenHelper moh=new MyOpenHelper(getContext(),"student.db",null,2); SQLiteDatabase db=moh.getReadableDatabase(); db.execSQL("insert into student values(?,?,?)",new Object[]{"1234","Lily","19"}); db.execSQL("insert into student values(?,?,?)",new Object[]{"1235","Bob","20"}); db.execSQL("insert into student values(?,?,?)",new Object[]{"1236","Amy","18"}); db.execSQL("insert into student values(?,?,?)",new Object[]{"1237","Tom","21"}); db.execSQL("insert into student values(?,?,?)",new Object[]{"1238","Alice","18"}); db.execSQL("insert into student values(?,?,?)",new Object[]{"1239","Grace","20"}); db.execSQL("insert into student values(?,?,?)",new Object[]{"1240","Henry","23"}); db.execSQL("insert into student values(?,?,?)",new Object[]{"1241","David","40"}); db.execSQL("insert into student values(?,?,?)",new Object[]{"1242","Soada","17"}); db.close(); } public void testDelete(){ MyOpenHelper moh=new MyOpenHelper(getContext(),"student.db",null,2); SQLiteDatabase db=moh.getReadableDatabase(); db.execSQL("delete from student where number=?",new Object[]{1241}); db.close(); } public void testUpdate(){ MyOpenHelper moh=new MyOpenHelper(getContext(),"student.db",null,2); SQLiteDatabase db=moh.getReadableDatabase(); db.execSQL("update student set number=? where name=?",new Object[]{"1314","Soada"}); db.close(); }}
對於對資料庫的尋找操作,我們需要利用遊標實現按行掃描一遍資料庫,並取出符合要求的資料,我們調用rawQuery方法,第一個參數為select語句;第二個參數為select語句中預留位置參數的值,如果select語句沒有使用預留位置(也就是where語句),該參數可以設定為null,返回一個遊標Cursor。掃描方法是:如果遊標指向的下一行不為空白,就擷取每行每個屬性的值,從而實現多行掃描並得到整個資料庫的資料。我們還要強調一下getString()方法傳遞的參數是一個整型的索引值,它代表該屬性的索引值,第一個為0,以此類推;但我們在不明確資料庫結構的情況下,很難知道確切的值,因此我們通常調用getColumnIndex方法。代碼如下:
1 public void testSelect(){ 2 MyOpenHelper moh=new MyOpenHelper(getContext(),"student.db",null,2); 3 SQLiteDatabase db=moh.getReadableDatabase(); 4 Cursor cursor=db.rawQuery("select * from student",null); 5 while(cursor.moveToNext()){ 6 //擷取下一行資料 7 String number = cursor.getString(cursor.getColumnIndex("number")); 8 String name = cursor.getString(cursor.getColumnIndex("name")); 9 String age = cursor.getString(cursor.getColumnIndex("age"));10 System.out.println(number+";"+name+";"+age);11 db.close();12 }
下面我們來逐一測試一下:
增加若干條資料進入資料庫student:
刪除一條記錄:刪除number為1241的記錄
修改一條記錄:Soada的number改為1314
我們掌握了在Android中使用SQLite對資料的增刪改查,下節我們要實現的是將資料庫的每條記錄依次顯示到螢幕上。
在Android中利用SQLite實現對資料的增刪查改