Android数据存储之SQLite的操作
Android作為一個應(yīng)用在移動設(shè)備上的操作系統(tǒng),自然也就少不了數(shù)據(jù)的存儲。然而SQLite作為一個輕型的關(guān)系型數(shù)據(jù)庫,基于其輕量、跨平臺、多語言接口及安全性等諸多因數(shù)考慮,因而Android較大的數(shù)據(jù)存儲采用了SQLite。SQLite與大多數(shù)關(guān)系型數(shù)據(jù)庫一樣都遵循ACID,語法也非常相似。只要您懂得mysql、sqlserver等關(guān)系型數(shù)據(jù)庫的操作,只要查看下SQLite的官方文檔便可快速上手。SQLite語法您可通過http://sqlite.org/lang.html進(jìn)行查看。
接下來看看Android是怎樣操作SQLite的吧。Android下只要擴(kuò)展SQLiteOpenHelper接口,并實(shí)現(xiàn)其Create和update方法便可以便捷地對SQLite進(jìn)行管理。下面看下數(shù)據(jù)庫管理類。
package com.example.ibm.myappsqllite;import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper;/*** Created by ibm on 2015/9/11.*/ public class Db extends SQLiteOpenHelper {public Db(Context context, int version) {super(context, "db", null, version);//可以根據(jù)最后一個參數(shù)的version來完成表的自動創(chuàng)建和升級 }@Overridepublic void onCreate(SQLiteDatabase db) {String sql = "CREATE TABLE user(" +"id integer primary key autoincrement, " +"name TEXT DEFAULT \"\"," + "sex TEXT DEFAULT \"\")";System.out.println("創(chuàng)建數(shù)據(jù)庫:" + sql);db.execSQL(sql);}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {//更新數(shù)據(jù)庫String sql = "ALTER TABLE user ADD COLUMN mark TEXT DEFAULT \"\"";System.out.println("更新數(shù)據(jù)庫:" + sql);db.execSQL(sql);} }在MainActivity.java中的onCreate方法添加如下代碼。
Db db = new Db(this, 1);//清空數(shù)據(jù)SQLiteDatabase sqLiteDb = db.getWritableDatabase();System.out.println("------------清空表數(shù)據(jù)------------");sqLiteDb.delete("user", null, null);System.out.println("------------充值表自增ID------------");sqLiteDb.execSQL("update sqlite_sequence SET seq = 0 where name ='user';");//重置id sqLiteDb.close();// 寫入數(shù)據(jù)System.out.println("------------寫入數(shù)據(jù)------------");sqLiteDb = db.getWritableDatabase();ContentValues cv = new ContentValues();cv.put("name", "王五");cv.put("sex", "男");sqLiteDb.insert("user", null, cv);cv = new ContentValues();cv.put("name", "李利");cv.put("sex", "女");sqLiteDb.insert("user", null, cv);sqLiteDb.close();// 查詢數(shù)據(jù)db = new Db(this, 2);System.out.println("------------查詢數(shù)據(jù)1------------");SQLiteDatabase sqLiteDbup = db.getReadableDatabase();Cursor c = sqLiteDbup.query("user", new String[]{"id", "name", "sex"}, null, null, null, null, null);while (c.moveToNext()) {Integer id = c.getInt(c.getColumnIndex("id"));String name = c.getString(c.getColumnIndex("name"));String sex = c.getString(c.getColumnIndex("sex"));System.out.println(String.format("id: %d, name: %s, sex: %s", id, name, sex));}sqLiteDbup.close();//更新數(shù)據(jù)System.out.println("------------更新數(shù)據(jù)------------");SQLiteDatabase sqldb = db.getWritableDatabase();ContentValues contentValues = new ContentValues();contentValues.put("sex", "gay");contentValues.put("mark", "wang wu is gay");String[] whereValues = {"王五"};sqldb.update("user", contentValues, "name = ?", whereValues);sqldb.close();// 查詢數(shù)據(jù)System.out.println("------------查詢數(shù)據(jù)2------------");sqLiteDbup = db.getReadableDatabase();c = sqLiteDbup.query("user", new String[]{"id", "name", "sex", "mark"}, null, null, null, null, null);while (c.moveToNext()) {Integer id = c.getInt(c.getColumnIndex("id"));String name = c.getString(c.getColumnIndex("name"));String sex = c.getString(c.getColumnIndex("sex"));String mark = c.getString(c.getColumnIndex("mark"));System.out.println(String.format("id: %d, name: %s, sex: %s, mark: %s", id, name, sex, mark));}sqLiteDbup.close();//刪除數(shù)據(jù)System.out.println("------------刪除數(shù)據(jù)------------");sqldb = db.getWritableDatabase();String[] delWhere = {"李利"};sqldb.delete("user", "name = ?", delWhere);sqldb.close();// 查詢數(shù)據(jù)System.out.println("------------查詢數(shù)據(jù)3------------");sqLiteDbup = db.getReadableDatabase();c = sqLiteDbup.query("user", new String[]{"id", "name", "sex", "mark"}, null, null, null, null, null);while (c.moveToNext()) {Integer id = c.getInt(c.getColumnIndex("id"));String name = c.getString(c.getColumnIndex("name"));String sex = c.getString(c.getColumnIndex("sex"));String mark = c.getString(c.getColumnIndex("mark"));System.out.println(String.format("id: %d, name: %s, sex: %s, mark: %s", id, name, sex, mark));}sqLiteDbup.close();db.close();將應(yīng)用運(yùn)行到虛擬機(jī)后,你可以看到如下結(jié)果
09-11 18:58:29.460 6647-6647/com.example.ibm.myappsqllite I/System.out﹕ 創(chuàng)建數(shù)據(jù)庫:CREATE TABLE user(id integer primary key autoincrement, name TEXT DEFAULT "",sex TEXT DEFAULT "") 09-11 18:58:29.500 6647-6647/com.example.ibm.myappsqllite I/System.out﹕ ------------清空表數(shù)據(jù)------------ 09-11 18:58:29.532 6647-6647/com.example.ibm.myappsqllite I/System.out﹕ ------------充值表自增ID------------ 09-11 18:58:29.532 6647-6647/com.example.ibm.myappsqllite I/System.out﹕ ------------寫入數(shù)據(jù)------------ 09-11 18:58:29.616 6647-6647/com.example.ibm.myappsqllite I/System.out﹕ ------------查詢數(shù)據(jù)1------------ 09-11 18:58:29.628 6647-6647/com.example.ibm.myappsqllite I/System.out﹕ 更新數(shù)據(jù)庫:ALTER TABLE user ADD COLUMN mark TEXT DEFAULT "" 09-11 18:58:29.640 6647-6647/com.example.ibm.myappsqllite I/System.out﹕ id: 1, name: 王五, sex: 男 09-11 18:58:29.644 6647-6647/com.example.ibm.myappsqllite I/System.out﹕ id: 2, name: 李利, sex: 女 09-11 18:58:29.644 6647-6647/com.example.ibm.myappsqllite I/System.out﹕ ------------更新數(shù)據(jù)------------ 09-11 18:58:29.668 6647-6647/com.example.ibm.myappsqllite I/System.out﹕ ------------查詢數(shù)據(jù)2------------ 09-11 18:58:29.684 6647-6647/com.example.ibm.myappsqllite I/System.out﹕ id: 1, name: 王五, sex: gay, mark: wang wu is gay 09-11 18:58:29.684 6647-6647/com.example.ibm.myappsqllite I/System.out﹕ id: 2, name: 李利, sex: 女, mark: 09-11 18:58:29.688 6647-6647/com.example.ibm.myappsqllite I/System.out﹕ ------------刪除數(shù)據(jù)------------ 09-11 18:58:29.708 6647-6647/com.example.ibm.myappsqllite I/System.out﹕ ------------查詢數(shù)據(jù)3------------ 09-11 18:58:29.716 6647-6647/com.example.ibm.myappsqllite I/System.out﹕ id: 1, name: 王五, sex: gay, mark: wang wu is gay此時可以查看下模擬器中的/data/data/項(xiàng)目包/databases/目錄下,已經(jīng)存在了一個db數(shù)據(jù)庫(名字為前面定義的數(shù)據(jù)庫名)。
本文轉(zhuǎn)自秋楓博客園博客,原文鏈接:http://www.cnblogs.com/rwxwsblog/p/4801973.html,如需轉(zhuǎn)載請自行聯(lián)系原作者
總結(jié)
以上是生活随笔為你收集整理的Android数据存储之SQLite的操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: FreeNAS安装与应用—安装篇
- 下一篇: 有趣的HTML5/CSS3艺术网站