Android SQLite 簡單使用樣本

來源:互聯網
上載者:User

標籤:sqlite3   資料庫   datatype missmatch   sqliteopenhelper   android sqlite   

SQLite簡介

Google為Andriod的較大的資料處理提供了SQLite,他在資料存放區、管理、維護等各方面都相當出色,功能也非常的強大。

袖珍型的SQLite可以支援高達2TB大小的資料庫,每個資料庫都是以單個檔案的形式存在,這些資料都是以B-Tree的資料結構形式儲存在磁碟上。
在交易處理方面,SQLite通過資料庫級上的獨佔性和共用鎖定來實現獨立交易處理。這意味著多個進程可以在同一時間從同一資料庫讀取資料,但只有一個可以寫入資料。在某個進程或線程想資料庫執行寫操作之前,必須獲得獨佔鎖。在獲得獨佔鎖之後,其他的讀或寫操作將不會再發生。
SQLite採用動態資料類型,當某個值插入到資料庫時,SQLite將會檢查它的類型,如果該類型與關聯的列不匹配,SQLite則會嘗試將該值轉換成該列的類型,如果不能轉換,則該值將作為本身的類型儲存,SQLite稱這為“弱類型”。但有一個特例,如果是INTEGER PRIMARY KEY,則其他類型不會被轉換,會報一個“datatype missmatch”的錯誤。
概括來講,SQLite支援NULL、INTEGER、REAL、TEXT和BLOB資料類型,分別代表空值、整型值、浮點值、字串文本、二進位對象。

SQLite還包括以下特點:

1、SQLite3支援 NULL、INTEGER、REAL(浮點數字)、TEXT(字串文本)和BLOB(二進位對象)資料類型,雖然它支援的類型雖然只有五種,但實際上sqlite3也接受varchar(n)、char(n)、decimal(p,s) 等資料類型,只不過在運算或儲存時會轉成對應的五種資料類型。
2、SQLite最大的特點是你可以儲存任何類型的資料到任何欄位中,無論這列聲明的資料類型是什麼。例如:可以在Integer欄位中存放字串,或者在布爾型欄位中存放浮點數,或者在字元型欄位中存放日期型值。
3、但有一種情況例外:定義為INTEGER PRIMARY KEY的欄位只能儲存64位整數, 當向這種欄位中儲存除整數以外的資料時,將會產生錯誤。
4、另外, SQLite 在解析CREATE TABLE 語句時,會忽略 CREATE TABLE 語句中跟在欄位名後面的資料類型資訊,如下面語句會忽略 name欄位的類型資訊:
CREATE TABLE person (personid integer primary key autoincrement, name varchar(20))

PersonSqliteOpenHelper類

public class PersonSqliteOpenHelper extends SQLiteOpenHelper {    /**     * 資料庫的構造方法     * 資料庫查詢的結果集,為null則使用預設的結果集     * 資料庫的版本,從1開始,小於1則拋異常     * @param context     */    public PersonSqliteOpenHelper(Context context) {        super(context, "person.db", null, 1);    }    /**     * 資料庫在第一次被建立時調用,表結構,初始化     * 資料類型的長度是無用的,只是給程式員看的     * @param sqLiteDatabase 資料庫     */    @Override    public void onCreate(SQLiteDatabase sqLiteDatabase) {        sqLiteDatabase.execSQL("create table person (id integer primary key autoincrement, name varchar(20), number varchar(20))");    }    @Override    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {    }}

PersonDao類

public class PersonDao {    private PersonSqliteOpenHelper helper;    public PersonDao(Context context) {        helper = new PersonSqliteOpenHelper(context);    }    public void add(String name, String number){        SQLiteDatabase db = helper.getWritableDatabase();        db.execSQL("insert into person (name,number) values (?,?)", new Object[]{name,number});        db.close();    }    public boolean find(String name){        SQLiteDatabase db = helper.getWritableDatabase();        Cursor cursor = db.rawQuery("select * from person where name=?", new String[]{name});        boolean result = cursor.moveToNext();        cursor.close();        db.close();        return result;    }    public void update(String name, String newnumber){        SQLiteDatabase db = helper.getWritableDatabase();        db.execSQL("update person set number=? where name=?", new Object[]{newnumber, name});        db.close();    }    public void delete(String name){        SQLiteDatabase db = helper.getWritableDatabase();        db.execSQL("delete from person where name=?",new String[]{name});        db.close();    }    public List<Person> findAll(){        SQLiteDatabase db = helper.getReadableDatabase();        List<Person> persons = new ArrayList<Person>();        Cursor cursor = db.rawQuery("select name,id,number from person ",null);        while (cursor.moveToNext()){            int id = cursor.getInt(cursor.getColumnIndex("id"));            String name = cursor.getString(cursor.getColumnIndex("name"));            String number = cursor.getString(cursor.getColumnIndex("number"));            Person p = new Person(id,name,number);            persons.add(p);        }        cursor.close();        db.close();        return persons;    }}

Person類

public class Person {    private int id;    private String name;    private String number;    public Person() {    }    public Person(int id, String name, String number) {        this.id = id;        this.name = name;        this.number = number;    }    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getNumber() {        return number;    }    public void setNumber(String number) {        this.number = number;    }    @Override    public String toString() {        return "Person{" +                "id=" + id +                ", name='" + name + '\'' +                ", number='" + number + '\'' +                '}';    }}

ApplicationTest類

public class ApplicationTest extends ApplicationTestCase<Application> {    public ApplicationTest() {        super(Application.class);    }    public void testDBHelp() throws Exception{        PersonSqliteOpenHelper perSQL = new PersonSqliteOpenHelper(getContext());        perSQL.getWritableDatabase();    }    public void testAdd() throws Exception{        PersonDao dao = new PersonDao(getContext());        dao.add("小明", "18500003039");    }    public void testFind(){        PersonDao dao = new PersonDao(getContext());        boolean result = dao.find("小明");        assertEquals(true, result);    }    public void testUpdate(){        PersonDao dao = new PersonDao(getContext());        dao.add("大帥", "13100001423");    }    public void testDelete(){        PersonDao dao = new PersonDao(getContext());        dao.delete("小明");    }    public void testFindAll(){        PersonDao dao = new PersonDao(getContext());        List<Person> persons = dao.findAll();        for (Person p:persons){            System.out.println(p.toString());        }    }}




著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

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.