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());
        }
    }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-05 00:04:06

Android SQLite 简单使用示例的相关文章

Android SQLite数据库操作示例

SQLite介绍 SQLite是一个非常流行的嵌入式数据库,它支持SQL语言,并且只利用很少的内存就有很好的性能.此外,它还是开源的,任何人都可以使用它. SQLite由以下几个组件组成:SQL编译器.内核.后端以及附件.SQLite通过利用虚拟机和虚拟数据库引擎(VDBE),使调试.修改和扩展SQLite的内核变得更加方便. SQLite支持的数据类型参考链接:http://blog.csdn.net/wzy_1988/article/details/36005947 Android在运行时(

Android SQLite数据库使用示例

简单介绍一下,现在的主流移动设备像Android.iPhone等都使用SQLite作为复杂数据的存储引擎,在我们为移动设备开发应用程序时,也许就要使用到SQLite来存储我们大量的数据,所以我们就需要掌握移动设备上的SQLite开发技巧.对于Android平台来说,系统内置了丰富的API来供开发人员操作SQLite,我们可以轻松的完成对数据的存取. 下面我们用SQLite来开发一个英语词典.下图是项目结构-- MySQLite.java package sn.qdj.sqlitedemo; im

【原创】android——SQLite实现简单的注册登陆(已经美化)

1,Main_activity的xmL配置 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4 android:layout_height="match_pa

Android SQLite最简单demo实现(增删查改)

本来不太想写这篇博客的,但是看到网上的关于android数据库操作的博文都讲得很详细,对于像我这样的新手入门了解SQLite的基本操作有一定难度,所以我参考了网上的一些博客文章,并自己亲自摸索了一遍,希望写出这么一篇博文来记录SQLite的最基本操作,同时也希望能够对android的新手们有些帮助. 参考博客:http://www.20864.com/201247/274.html 这里只是一个示范性的demo,并没实现什么具体功能,只实现了对数据库的增删查改操作. 以下是实现demo的步骤:

简单的Android Sqlite 使用

简单的Android Sqlite 使用: package com.pdsu.db_test; import java.sql.Date; import android.app.Activity; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.widget.Toast; public class Main

Android之——断点下载示例

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46897641 在上一篇博文<Android之--多线程下载示例>中,我们讲解了如何实现Android的多线程下载功能,通过将整个文件分成多个数据块,开启多个线程,让每个线程分别下载一个相应的数据块来实现多线程下载的功能.多线程下载中,可以将下载这个耗时的操作放在子线程中执行,即不阻塞主线程,又符合Android开发的设计规范. 但是当下载的过程当中突然出现手机卡死,或者网络中断

Android Sqlite对Date类型操作总结

首先,sqlite数据库在时间处理上和sqlserver还有oracle不同,下面根据自己做过的实例总结一下. 创建了一个Log数据表: LogID SourceID OperatorID LogType LogLevel LogTime              LogContent 1 aaa.aspx 0 2 1 2011-08-18 16:44:32.000 aaaa 2 bbb.aspx 1 2 2 2011-08-18 16:38:32.000 bbbb 3 ccc.aspx 2 3

【原创】android——SQLite的cmd命令的基本操作

步骤:enter为按键 1,开始—>运行—>输入cmd  (enter) 2,输入adb shell  (enter) 3, cd data/data/应用包名/databases  (enter) 4, ls (查看目录下的数据库)   (enter) 5,sqlite3  数据库名.db;   (enter) 6,SQL语句操作表,注意标点符号一定是在英文输入法下 7,示例: [原创]android--SQLite的cmd命令的基本操作,布布扣,bubuko.com

Android Sqlite基本命令

要查看数据库,首先必须要找到db文件,如果拷贝到电脑上,查看的方法比较多,在手机上,用命令查看比较直接和方便. 首先要找到数据库的位置,一般数据库时存放在程序的私有目录,所以要获取root权限. 确保开发工具已经连接上手机,打开命令行,输入adb shell 这时还没有获取root权限,输入su,手机会弹出提示,允许获取root权限 后缀变为"#",成功获取root权限,这时可以进入应用程序的私有目录, 输入cd data/data/程序包名/databases/,进入数据库的目录 下