Android資料存放區之SQLite使用_Android

來源:互聯網
上載者:User

SQLite是一款開源的、嵌入式關係型資料庫,第一個版本Alpha發佈於2000年。SQLite在便攜性、易用性、緊湊性、高效性和可靠性方面有著突出的表現。

在Android中建立的SQLite資料庫儲存在:/data/data/<包名>/databases/目錄下。

主要特點:

-輕量級

-獨立性,沒有不依賴,無需安裝

-跨平台,支援眾多作業系統

-支援高達2TB大小的資料庫

-每個資料庫以單個檔案的形式存在

-以B-Tree的資料結構形式儲存在硬碟

SQLite的資料類型:

SQLite支援NULL、INTEGER、REAL、TEXT和BLOB資料類型

分別代表:空值、整型值、浮點值、字串值、二進位對象。

動態資料類型(弱引用):

當某個值插入到資料庫中時,SQLite將會檢測它的資料類型,如果該類型與關聯的列不匹配,SQLite則會嘗試將該值轉換成該列的類型,如果不能轉換,則該值將作為本身的類型儲存。

在Android中使用SQLite主要涉及兩個類:

SQLiteDatabase和SQLiteOpenHelper,下面對這兩個類進行主要的分析。

SQLiteDatabase

這個類提供了一些管理SQLite資料庫的方法,比如建立、刪除、執行SQL命令,和執行其他常見的資料庫管理工作的方法。每個程式的資料庫名字是唯一的。

常用方法:

db.execSQL(String sql) //執行任何的SQL語句

db.insert(String table,String nullColumnHack,ContentValues values) //插入記錄

db.delete(String table,String whereClause,String[] whereArgs)//刪除記錄

db.update(String table,ContentValues values,String whereClause,String[] whereArgs)//更新記錄

db.query(String table,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy)//查詢記錄

db.rawQuery(String sql,String[] selectionArgs)//通過sql語句查詢記錄

下面是一個簡單操作SQLite資料庫的樣本:

public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//每個程式都有自己的資料庫//通過openOrCreateDatabase來開啟或建立一個資料庫,返回SQLiteDatabase對象/*** openOrCreateDatabase(String name,int mode,SQLiteDatabase.CursorFactory factory)* name: 資料庫名* mode: 資料庫許可權,MODE_PRIVATE為本應用程式私人,MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE分別為全域可讀和可寫。* factory: 可以用來執行個體化一個cusor對象的工廠類*/SQLiteDatabase db = openOrCreateDatabase("user.db",MODE_PRIVATE,null);//建立一個表db.execSQL("create table if not exists userTb (" +"_id integer primary key," +"name text not null,age integer not null," +"sex text not null)");//向表中插入記錄db.execSQL("insert into userTb (name,age,sex) values ('張三',18,'女')");db.execSQL("insert into userTb (name,age,sex) values ('李四',19,'男')");db.execSQL("insert into userTb (name,age,sex) values ('王五',20,'女')");//Cursor為查詢結果對象,類似於JDBC中的ResultSetCursor queryResult = db.rawQuery("select * from userTb", null);if (queryResult != null) {while (queryResult.moveToNext()) {Log.i("info", "id: " + queryResult.getInt(queryResult.getColumnIndex("_id"))+ " 姓名: " + queryResult.getString(queryResult.getColumnIndex("name"))+ " 年齡: " + queryResult.getInt(queryResult.getColumnIndex("age"))+ " 性別: " + queryResult.getString(queryResult.getColumnIndex("sex")));}//關閉遊標對象queryResult.close();}//關閉資料庫db.close();}}

當執行完openOrCreateDatabase("user.db",MODE_PRIVATE,null)後,會在/data/data/<包名>/databases/目錄下建立一個資料庫檔案,開啟DDMS可以查看。也可以將其匯出,使用navigate等工具開啟查看裡面的資料。

另外,上述樣本對記錄的操作是使用execSQL()方法通過原生的SQL語句進行的,當然也可以使用上面介紹的SQLiteDatabase常用的方法來操作,如insert()、delete()、update()、query()等方法。但是需要注意的是,以插入記錄舉例,當資料量不大時,通過execSQL()使用SQL語句進行插入與使用insert()方法插入記錄的效率是差不多的,但是如果資料量比較大,那麼使用前者比使用後者的效率明顯高出很多。

SQLiteOpenHelper

這個類為SQLiteDatabase的協助類,主要用於管理資料庫的建立與版本更新。SQLiteHelper是一個抽象類別,一般通過建立一個繼承自它的子類並重寫onCreat()和onUpgrade()方法進行使用。

-onCreat(SQLiteDatabase db) //首次建立資料庫時調用,一般用於建表等操作。

-onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion)//當升級資料庫版本時調用

下面是使用SQLiteOpenHelper的一個簡單樣本:

建立一個繼承自SQLiteOpenHelper的子類

public class SQLiteHelper extends SQLiteOpenHelper {/*** context:內容物件* name:資料庫名*/public SQLiteHelper(Context context, String name) {super(context, name, null, 1);}//首次建立資料庫的時候調用,一般進行建表或某些初始化的操作@Overridepublic void onCreate(SQLiteDatabase db) {//建表db.execSQL("create table if not exists userTb (" +"_id integer primary key," +"name text not null,age integer not null," +"sex text not null)");}//當資料庫版本升級時自動調用@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}}

然後就可以通過SQLiteHelper的執行個體擷取一個SQLiteDatabase對象,進而對資料庫進行一系列的操作了。

public class MainActivity2 extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main2);//建立一個SQLiteHelper對象SQLiteHelper helper = new SQLiteHelper(MainActivity2.this,"stu.db");//使用getWritableDatabase()或getReadableDatabase()方法獲得SQLiteDatabase對象SQLiteDatabase db = helper.getWritableDatabase();//插入記錄db.execSQL("insert into userTb (name,age,sex) values ('張三',18,'女')");db.execSQL("insert into userTb (name,age,sex) values ('李四',19,'男')");db.execSQL("insert into userTb (name,age,sex) values ('王五',20,'女')");//擷取遊標對象Cursor queryResult = db.rawQuery("select * from userTb", null);if (queryResult != null) {//列印所有記錄while (queryResult.moveToNext()) {Log.i("info", "id: " + queryResult.getInt(queryResult.getColumnIndex("_id"))+ " 姓名: " + queryResult.getString(queryResult.getColumnIndex("name"))+ " 年齡: " + queryResult.getInt(queryResult.getColumnIndex("age"))+ " 性別: " + queryResult.getString(queryResult.getColumnIndex("sex")));}//關閉遊標對象queryResult.close();}//關閉資料庫db.close();}}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.