【转载】Android数据存储之SQLite

SQLite是D.Richard Hipp用C语言编写的开源嵌入式数据库引擎。它支持大多数的SQL92标准,并且可以在所有主要的操作系统上运行。

在Android中创建的SQLite数据库存储在:/data/data/<包名>/databases/目录下。

主要特点:

-轻量级

-独立性,没有不依赖,无需安装

-跨平台,支持众多操作系统

-支持高达2TB大小的数据库

-每个数据库以单个文件的形式存在

-以B-Tree的数据结构形式存储在硬盘

SQLite的数据类型:

SQLite支持NULL、INTEGER、REAL、TEXT和BLOB数据类型

分别代表:空值、整型值、浮点值、字符串值、二进制对象。

动态数据类型(弱引用):

当某个值插入到数据库中时,SQLite将会检测它的数据类型,如果该类型与关联的列不匹配,SQLite则会尝试将该值转换成该列的类型,如果不能转换,则该值将作为本身的类型存储。

在Android中使用SQLite主要涉及两个类:

SQLiteDatabaseSQLiteOpenHelper,下面对这两个类进行主要的分析。

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 {

    @Override
    protected 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中的ResultSet
        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();
    }
}

当执行完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);
    }

    //首次创建数据库的时候调用,一般进行建表或某些初始化的操作
    @Override
    public 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)");
    }

    //当数据库版本升级时自动调用
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}

然后就可以通过SQLiteHelper的实例获取一个SQLiteDatabase对象,进而对数据库进行一系列的操作了。

public class MainActivity2 extends AppCompatActivity {

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

时间: 2024-10-07 05:06:34

【转载】Android数据存储之SQLite的相关文章

Android数据存储之SQLite使用

SQLite是D.Richard Hipp用C语言编写的开源嵌入式数据库引擎.它支持大多数的SQL92标准,并且可以在所有主要的操作系统上运行. 在Android中创建的SQLite数据库存储在:/data/data/<包名>/databases/目录下. 主要特点: -轻量级 -独立性,没有不依赖,无需安装 -跨平台,支持众多操作系统 -支持高达2TB大小的数据库 -每个数据库以单个文件的形式存在 -以B-Tree的数据结构形式存储在硬盘 SQLite的数据类型: SQLite支持NULL.

Android数据存储之SQLite的操作

Android作为一个应用在移动设备上的操作系统,自然也就少不了数据的存储.然而SQLite作为一个轻型的关系型数据库,基于其轻量.跨平台.多语言接口及安全性等诸多因数考虑,因而Android较大的数据存储采用了SQLite.SQLite与大多数关系型数据库一样都遵循ACID,语法也非常相似.只要您懂得mysql.sqlserver等关系型数据库的操作,只要查看下SQLite的官方文档便可快速上手.SQLite语法您可通过http://sqlite.org/lang.html进行查看. 接下来看

android数据存储之Sqlite(二)

SQLite学习笔记 前言:上一章我们介绍了sqlite的一些基本知识以及在dos命令下对sqlite进行的增删改查的操作,这一章我们将在android项目中实际来操作sqlite. 1. SQLiteDatabase的介绍 Android提供了创建和是用SQLite数据库的API.SQLiteDatabase代表一个数据库对象,提供了操作数据库的一些方法.在 Android的SDK目录下有sqlite3工具,我们可以利用它创建数据库.创建表和执行一些SQL语句.下面是SQLiteDatabas

Android数据存储之SQLite数据库

SQLite是一个小巧的嵌入式数据库,使用方便.开发简单,手机上最早由IOS运用,后来Android也采用了SQLite. SQLite的多数SQL语法与Oracle 一样,下面只列出不同的地方: (1)建表时为避免重复操作,应加上IF NOT EXISTS关键词,例如CREATE TABLE IF NOT EXISTS table_name (2)删表时为避免重复操作,应加上IF EXISTS关键词,例如DROP TABLE IF EXISTS table_name (3)添加新列时使用ALT

【Android数据存储】SQLite使用实例(附源码)(转载)

原文地址:http://blog.csdn.net/wirelessqa/article/details/8583101 java当中提供了相当多的封装好的类来执行对SqlLite的操作,如: SQLiteDatabase 作为数据库操作的类,类似于C#当中我们自己写的helper,PS(java对此还真是高度封装) SQLiteOpenHelper 作为作为维护和管理数据库的基类实例: 会员信息管理 功能:1.查看数据库 2.清空数据库 3.增加会员 4.删除会员 5.更新会员 6.查找会员

android数据存储之Sqlite(一)

SQLite学习笔记 1. Sqlite简介 SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入 式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了.它能够支持 Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如Tcl.PHP.Java.C++..Net等,还有 ODBC接口,同样比起 Mysql.PostgreSQL这两款开源世界著名的数据库管理系统来讲,它

Android数据存储之Sqlite采用SQLCipher数据库加密实战

前言: 最近研究了Android Sqlite数据库(文章地址:http://www.cnblogs.com/whoislcj/p/5506294.html)以及ContentProvider程序间数据共享(http://www.cnblogs.com/whoislcj/p/5507928.html),我们清晰的知道Sqlite数据库默认存放位置data/data/pakage/database目录下,对于已经ROOT的手机来说的没有任何安全性可以,一旦被利用将会导致数据库数据的泄漏,所以我们该

android 数据存储之SQLite

使用嵌入式关系型SQLite数据库存储数据 除了可以使用文件或SharedPreferences存储数据,还可以选择使用SQLite数据库存储数据. 在Android平台上,集成了一个嵌入式关系型数据库—SQLite, 1.SQLite3支持 NULL.INTEGER.REAL(浮点数字).TEXT(字符串文本)和BLOB(二进制对象)数据类型,虽然它支持的类型虽然只有五种,但实际上sqlite3也接受varchar(n).char(n).decimal(p,s) 等数据类型,只不过在运算或保存

Android数据存储引擎---SQLite数据库

目标:是否可以在PC端桌面上使用SQLite数据库制作一个财务文件? 目录: 来源: 实践: 总结和比较: SQLite数据简介 是什么,内部结构是怎样的,数据库和表的关系是什么 有什么用 常用的操作是什么 SQLite数据库使用 增 删 改 查 SQLite数据库实践上的优化措施 对于Android平台来说,系统内置了丰富的API来供开发人员操作SQLite,使我们轻松完成对数据的存取. 步骤1,熟悉创建数据库表,熟悉相关的操作指令,实现对SQLite数据库的感性认识 创建一个包含简单内容的数