Android學習之SQLite學習
花了2天時間,系統學習了下Android開發過程中使用的輕量級資料庫SQLite的使用。並掌握其增,刪,該,查的基本資料庫操作。
首先要使用SQLite資料庫,需要通過Android系統提供的SQLiteOpenHelper的幫助類,通過這個類我們可以得到一個SQLite資料庫。因此我們需要建立一個類繼承SQLiteOpenHelper這個類,然後實現它的onCreate()和update()方法。 我在我的welthy.myDB包中所建立的基礎幫助類的類 只實現onCreate()和update()方法。具體的增,刪,改,查操作我另外建立了一個類實現。 所以這裡的資料庫初始化部分也放在了 操作實現的類中。 對於實現幫助類的程式碼如下:
package welthy.mydb; import android.content.ContentValues; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class DBmanager extends SQLiteOpenHelper{ public DBmanager(Context context,String name) { super(context,name,null,1); } @Override public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub System.out.println("create a database"); db.execSQL("CREATE TABLE user(id int,name varchar(20))"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub } }
實現了幫助類後 我便可以建立資料庫,並對資料庫進行一系列的操作。
首先進行資料庫的初始化部分:
package welthy.mydb; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; public class DBways { private SQLiteDatabase db; private DBmanager dbHelper; private String key; //private Person person; public DBways(Context context,String name) { dbHelper=new DBmanager(context,name); db=dbHelper.getWritableDatabase(); ContentValues values=new ContentValues(); values.put("name", "xiao_ming"); values.put("id", "001"); values.put("name", "xiao_hong"); values.put("id", "002"); db.insert("user", null, values); System.out.println("建立表"+name); }
在進行初始化之前首先要得到SQLiteDatabase的物件和實現SQLiteOpenHelper幫助類的物件(即:DBmanager)。然後再資料庫操作實現類DBways類的建構函式中建立資料庫。如果僅僅是dbHelper=new DBmanager(context,name);的話是無法得到資料庫的,還有通過dbHelper.getWriteable()【需要對資料庫編輯時】或者dbHelper.getReadable();【只讀取資料庫時】。通過這2個函式才可以得到一個數據庫。然後通過ContentValues類給資料庫的內容進行初始化【也可以不初始化,此時就是一個空資料庫】。然後呼叫insert("表名",null,values)將初始化的值新增進資料庫。
初始化後,首先說明下新增資料操作。
這裡我定義的函式為:insert(String Pname,int Pid);具體實現內容和初始化新增資料時一樣都是呼叫db【即 SQLiteDatabase的物件】的insert(。。。)函式。具體程式碼如下:
public void insert(String Pname,int Pid)
{
ContentValues value=new ContentValues();
value.put("name",Pname);
value.put("id",Pid);
db.insert("user", null, value);
System.out.println(value);
}
主函式中直接呼叫就可以。
然後說明刪除資料操作。
這裡我定義的函式有2個一個是根據關鍵字刪除,一個是刪除資料庫所有資料。呼叫的是db.delete("表名","刪除條件","刪除條件中的引數【即刪除條件中?號的值】");
其中根據關鍵字刪除的是deleteKey(String name);實現程式碼如下:
public void deleteKey(String name)
{
db.delete("user", "name=?", new String[]{name});
System.out.printf("delete:%s\n",name );
}
刪除所有資料就是刪除條件為null的情況。實現程式碼如下:
public void deleteAll()
{
db.delete("user",null,null);
}
接著,說明下查詢操作。
這裡利用Cursor類來蒐集查詢結果集。這裡呼叫的是rawQuery函式,這個函式是可以直接通過SQL語句進行查詢操作。然後結果放入Cursor的物件cursor中。
當然,也可以使用query()函式,這個函式不需要熟悉SQL語句的操作,但同樣返回的是cursor型別值。 實現程式碼如下:
public void queryAll()
{
Cursor cursor=db.rawQuery("SELECT * FROM user", null);
if(cursor.getCount()>0)
{
cursor.moveToFirst();
while(cursor.moveToNext())
{
String id=cursor.getString(0);
String name=cursor.getString(1);
System.out.printf("%s,%s\n",name,id);
}
}
}
這裡得到cursor結果集之後,則可以通過Cursor類的方法對結果進行查詢,首先將cursor遊標放在第一行cursor.moveToFirst(),然後進入一個迴圈,只要下一行還有資料,則通過cursor.getString(欄位下標【0開始】)以字串的形式得到資料。直到下一行沒有資料為止。
最後,說明下修改操作。
這裡我同樣定義了2個函式,因為我的欄位就只有name和 id 2個。所以,可以根據一個欄位修改同一行的另一個欄位值。同樣是通過ContentValues類得到修改後的資料,然後通過db.update("表名",更新的值,更新條件,更新條件引數)。來修改資料。
首先是修改name欄位的函式editName(String name,int id)。具體實現程式碼如下:
public void editName(String name,int id)
{
ContentValues values=new ContentValues();
values.put("name",name);
db.update("user", values, "id=?", new String[]{String.valueOf(id)});
}
然後是修改id欄位的函式editId(String name,int id)。 具體實現程式碼如下:
public void editId(String name,int id)
{
ContentValues values=new ContentValues();
values.put("id",id);
db.update("user", values, "name=?", new String[]{name});
}
具體的4種操作如上所述。如有疑問,歡迎探討。