Android資料存放區之SQLite的操作

來源:互聯網
上載者:User

標籤:

  Android作為一個應用在行動裝置上的作業系統,自然也就少不了資料的儲存。然而SQLite作為一個輕型的關係型資料庫,基於其輕量、跨平台、多語言介面及安全性等諸多因數考慮,因而Android較大的資料存放區採用了SQLite。SQLite與大多數關係型資料庫一樣都遵循ACID,文法也非常相似。只要您懂得mysql、sqlserver等關係型資料庫的操作,只要查看下SQLite的官方文檔便可快速上手。SQLite文法您可通過http://sqlite.org/lang.html進行查看。

  接下來看看Android是怎樣操作SQLite的吧。Android下只要擴充SQLiteOpenHelper介面,並實現其Create和update方法便可以便捷地對SQLite進行管理。下面看下資料庫管理類。

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);//可以根據最後一個參數的version來完成表的自動建立和升級    }    @Override    public void onCreate(SQLiteDatabase db) {        String sql = "CREATE TABLE user(" +                "id integer primary key autoincrement, " +                "name TEXT DEFAULT \"\"," + "sex TEXT DEFAULT \"\")";        System.out.println("建立資料庫:" + sql);        db.execSQL(sql);    }    @Override    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {//更新資料庫        String sql = "ALTER TABLE user ADD COLUMN mark TEXT DEFAULT \"\"";        System.out.println("更新資料庫:" + sql);        db.execSQL(sql);    }}

  在MainActivity.java中的onCreate方法添加如下代碼。

Db db = new Db(this, 1);        //清空資料        SQLiteDatabase sqLiteDb = db.getWritableDatabase();        System.out.println("------------清空表資料------------");        sqLiteDb.delete("user", null, null);        System.out.println("------------儲值表自增ID------------");        sqLiteDb.execSQL("update sqlite_sequence SET seq = 0 where name =‘user‘;");//重設id        sqLiteDb.close();//        寫入資料        System.out.println("------------寫入資料------------");        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();//        查詢資料        db = new Db(this, 2);        System.out.println("------------查詢資料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();//更新資料        System.out.println("------------更新資料------------");        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();//        查詢資料        System.out.println("------------查詢資料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();        //刪除資料        System.out.println("------------刪除資料------------");        sqldb = db.getWritableDatabase();        String[] delWhere = {"李利"};        sqldb.delete("user", "name = ?", delWhere);        sqldb.close();//        查詢資料        System.out.println("------------查詢資料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();

  將應用運行到虛擬機器後,你可以看到如下結果

09-11 18:58:29.460    6647-6647/com.example.ibm.myappsqllite I/System.out﹕ 建立資料庫: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﹕ ------------清空表資料------------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﹕ ------------寫入資料------------09-11 18:58:29.616    6647-6647/com.example.ibm.myappsqllite I/System.out﹕ ------------查詢資料1------------09-11 18:58:29.628    6647-6647/com.example.ibm.myappsqllite I/System.out﹕ 更新資料庫: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﹕ ------------更新資料------------09-11 18:58:29.668    6647-6647/com.example.ibm.myappsqllite I/System.out﹕ ------------查詢資料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 gay09-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﹕ ------------刪除資料------------09-11 18:58:29.708    6647-6647/com.example.ibm.myappsqllite I/System.out﹕ ------------查詢資料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/項目包/databases/目錄下,已經存在了一個db資料庫(名字為前面定義的資料庫名)。

 

Android資料存放區之SQLite的操作

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.