安卓数据存储(3):SQLite数据库存储

SQLite简介

Google为Andriod的较大的数据处理提供了SQLite,他在数据存储、管理、维护等各方面都相当出色,功能也非常的强大。SQLite具备下列特点:

1.轻量级:使用 SQLite 只需要带一个动态库,就可以享受它的全部功能,而且那个动态库的尺寸想当小。

2.独立性:SQLite 数据库的核心引擎不需要依赖第三方软件,也不需要所谓的“安装”。

3.隔离性:SQLite 数据库中所有的信息(比如表、视图、触发器等)都包含在一个文件夹内,方便管理和维护。

4.跨平台:SQLite 目前支持大部分操作系统,不至电脑操作系统更在众多的手机系统也是能够运行,比如:Android。

5.多语言接口:SQLite 数据库支持多语言编程接口。

6.安全性:SQLite 数据库通过数据库级上的独占性和共享锁来实现独立事务处理。这意味着多个进程可以在同一时间从同一数据库读取数据,但只能有一个可以写入数据。

Android为了让我们能够更好的管理数据库,专门提供了一个SQLiteOpenHelper帮助类,这是一个抽象类,因此要使用的话需要创建一个自己的帮助类去继承它。SQLiteOpenHelper类中有两个抽象方法,分别是onCreate(),和onUpgrade(),帮助类中必须重写这两个方法,然后在这两个方法中去实现创建、升级数据库的逻辑。SQLiteOpenHelper中有两个重要的实例方法,getWritableDatabase()和getReadableDatabase().这两个方法都可以创建或打开一个现有数据库(如果数据库已经存在,则直接打开,否则创建一个新的数据库),并返回一个数据库的写读操作对象。不同的是当数据库不可吸入的时候(如磁盘已满)getReadableDatabase()的方法返回的对象将以只读的方式打开数据库,而getWritableDatabase()则抛出异常。

SQLiteOpenHelper中有两个构造方法可供重写,一般使用参数较少的那一个,即public DatabaseHelper(Context context, String name, CursorFactory factory,  int version),其中第一个参数是Context,必须有它才能对数据库进行操作,第二个参数是数据库的名字,第三个参数允许我们在查询数据时返回一个Cursor,一般传入为null,第四个参数是数据库的版本号,可用于对数据库的升级。通过代码实现如下:

新建项目MySQLiteTest:在新建一个DatabaseHelper.java类,继承SQLiteOpenHelper,同时修改activity_main.xml文件,添加如下代码:

  <Button
        android:id="@+id/create_database"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="创建数据库"/>

    <Button
        android:id="@+id/add_data"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/create_database"
        android:text="添加数据"/>

    <Button
        android:id="@+id/up_data"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/add_data"
        android:text="更新数据"/>

    <Button
        android:id="@+id/delete_data"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/up_data"
        android:text="删除数据"/>

    <Button
        android:id="@+id/query_data"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/delete_data"
        android:text="查询数据"/>

    <Button
        android:id="@+id/replace_data"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/query_data"
        android:text="使用事务替换数据"/>

activity_main.xml

在DatabaseHelper.java类中 新建一张Book表

public class DatabaseHelper extends SQLiteOpenHelper {

    public static final String CREATE_BOOK="create table Book("
            +"id integer primary key autoincrement,"
            +"author text,"
            +"price real,"
            +"page integer,"
            +"name text)";

    private Context myContext;
    public DatabaseHelper(Context context, String name, CursorFactory factory,
            int version) {
        super(context, name, factory, version);
        // TODO Auto-generated constructor stub
        myContext=context;
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub
        db.execSQL(CREATE_BOOK);
        Toast.makeText(myContext, "Create Success", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
        // TODO Auto-generated method stub

    }

}

DatabaseHelper

这里把建表的语句定义成一个字符串常量,然后在onCreate()方法中调用SQLiteDatabase的execSQL()方法来执行这条语句,并弹出“Create Success”,这样即可以保证在数据库创建完成的同时创建Book表。

然后在MainActivity.java中点击创建数据库的按钮,代码为:

定义一些变量:

private Button CreatBsesBtn;//创建数据库
    private Button addDataBtn;//添加数据
    private Button udDataBtn;//更新数据
    private Button deleteDataBtn;//删除数据
    private Button queryDataBtn;//插叙数据
    private Button replaceDataBtn;//替换数据
    private  DatabaseHelper mydb;

button

 mydb=new DatabaseHelper(this, "BookStore.db", null, 1);

         //添加数据库
         CreatBsesBtn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                mydb.getWritableDatabase();
            }
        });

添加数据库

这里通过构建一个DatabaseHelper,并通过构造函数的参数将数据库的名字指定为BookStore.db,版本号为1,然后在点击事件中调用getWritableDatabase()方法。这里查看不具体说明,可以用adb shell来对数据库和表的创建情况进行检查,具体配置不在说明。

下面不具体说明,看代码:

添加数据:

//添加数据
         addDataBtn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                SQLiteDatabase db=mydb.getWritableDatabase();
                ContentValues cv=new ContentValues();
                //添加数据
                cv.put("name", "Android");
                cv.put("author", "jesson");
                cv.put("page", 120);
                cv.put("price", 75.0);
                db.insert("Book", null, cv);
                cv.clear();
                db.insert("Book",null, cv);
            }
        });

addData

在这个事件里,先获取到SQLiteDatabase对象,然后使用ContentValues来对要添加的数据进行组装,因为id那一列设置的是自动增长,因此这里只需四列就行了。最后调用insert()方法进行数据插入。

更新数据:

//更新数据
         udDataBtn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                SQLiteDatabase db=mydb.getWritableDatabase();
                ContentValues cv=new ContentValues();
                cv.put("prices", 18.32);
                db.update("Book", cv, "name=?", new String[]{"Android"});
            }
        });

更新数据

这里使用update()方法去执行具体更新操作,使用第三四个参数来指定具体更新的是哪一行的,也就是:将书名为Android的书本价格改为 18.32(原来是75.0)。

删除数据:

//删除数据
         deleteDataBtn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                SQLiteDatabase db=mydb.getWritableDatabase();
                db.delete("Book", "page>?", new String[]{"500"});
            }
        });

删除数据:

这里使用delete()方法去执行删除操作,使用第二三个参数来指定具体删除的是哪一行,这里删除页数超过50页的书。

 //查询操作
         queryDataBtn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                SQLiteDatabase db=mydb.getWritableDatabase();
                //查询表中所有数据
                Cursor cursor=db.query("Book", null, null, null, null, null, null);
                if(cursor.moveToFirst()){
                    do{
                        String name=cursor.getString(cursor.getColumnIndex("name"));
                        String author=cursor.getString(cursor.getColumnIndex("author"));
                        int page=cursor.getInt(cursor.getColumnIndex("page"));
                        double price=cursor.getDouble(cursor.getColumnIndex("price"));
                    }while(cursor.moveToNext());
                }
                cursor.close();
            }
        });

查询操作

SQLiteDatabase中提供一个query()方法对数据进行查询,这个方法比较复杂,最短有七个参数,分别如下表所示:

query()方法参数 描述
table 指定查询的表名(可为null)
columns 指定查询的列名(可为null)
selection
指定where的约束条件(可为null)

selectionArgs 为where中的占位符提供具体的值(可为null)
groupBy 指定需要group by的列(可为null)
having 对group by后的结果进一步约束(可为null)
orderBy 指定查询结果的排序方式(可为null)

调用query()方法后会返回一个Cursor对象,查询到的所有数据都将从这个对象中取出。在本次查询中,我们在得到Cursor对象后,调用它的moveToFirst()方法将数据的指针移动到第一行的位置,然后进入一个循环当中,去遍历查询到的每一行数据。在这个循环中,可以通过getColumnIndex()方法获取到每一列在表中对应的位置索引。最后别忘了关闭Cursor.

事务的使用,在下一篇里进行介绍。

时间: 2024-11-05 04:49:15

安卓数据存储(3):SQLite数据库存储的相关文章

使用嵌入式关系型SQLite数据库存储数据

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

Android基础之十四数据存储 之 SQLite数据库详解

Android基础之十四数据存储 之 SQLite数据库详解 SQLite 是一款 轻量级的关系型数据库,它的运算速度非常快,占用资源很少,通常只需要几百 K 的内存就足够了,因而特别适合在移动设备上使用. SQLite 不仅支持标准的 SQL 语法,还遵循了数据库的 ACID( 原子性(Atomicity) .一致性(Consistency) . 隔离性(Isolation) . 持久性(Durability))事务,所以只要你以前使用过其他的关系型数据库,就可以很快地上手 SQLite.而

SQLite数据库存储

SQLite数据库存储 应用运行需要保存一系列有一定结构的数据, 比如说公司员工信息 文件类型: .db 数据保存的路径: /data/data/projectPackage/databases/xxx.db 默认情况下其它应用不能访问, 当前应用可以通过ContentProvider提供其它应用操作 应用卸载时会删除此数据 SQLite (http://www.sqlite.org/),是一款轻型的关系型数据库服务器, 移动设备的数据库存储都使用SQLite, 它的特点: 安装文件小: 最小只

python实现用户登陆(sqlite数据库存储用户信息)

python实现用户登陆(sqlite数据库存储用户信息) 目录 创建数据库 数据库管理 简单登陆 有些地方还未完善. 创建数据库 import sqlite3 #建一个数据库 def create_sql(): sql = sqlite3.connect("user_data.db") sql.execute("""create table if not exists %s( %s integer primary key autoincrement, %

在安卓开发中使用SQLite数据库操作实例

前段时间写了个安卓平台下SQLite数据库操作的实例 ,一直没得时间总结 ,今天把它弄出来了. 在Android 运行时环境包含了完整的 SQLite. 首先介绍一下SQLite这个数据库: SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了.它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tc

数据存储——SQLite数据库存储——API

一.特点 1.存储具有一定结构的数据 2.文件类型.db 3.存储目录:date/date/包名/datebases/数据库文件 4.应用卸载之后,数据同时被删除 5.数据不被其他应用直接操作 二.SQLite数据库 三.API 1.SQLiteOpenHelper   工具类 (1)是一个抽象类,需要继承并实现了抽象方法之后才能使用 (2)抽象方法: ①void   onCreate(SQLiteDatabase db) 1)创建和初始化数据库的回调方法 2)当连接数据库,未找到数据库文件时调

数据存储——SQLite数据库存储

一.特点 1.存储具有一定结构的数据 2.文件类型  .db 二.SQLite数据库 1.特点 1-轻型的关系型数据库 2-支持多种编程语言 3-适合在移动设备中使用 4-安装文件小 5-支持多个操作系统 6-运行速度快(数据量小) 7-数据库本身是单个文件 2.数据类型 1-整数:INT  .INTEGER: 2-浮点数:FLOAT   .DOUBLE  : 3-字符串文本 ①CHAR,定长的字符串: ②WARCHAR,变长的字符串: ③TEXT,大文本: 4-时间日期:DATE.DATETI

使用Sqlite数据库存储数据

1.Sql基本命令 1.1.创建表 表是有行和列组成的,列称为字段,行称为记录. 使用CREATE命令来创建表: 1 CREATE TABLE tab_student (studentId INTEGER PRIMARY KEY AUTOINCREMENT, 2 studentName VARCHAR(20), 3 studentAge INTEGER); 1.2.插入记录(行) 使用INSERT命令可以一次插入一条记录,INSERT命令的一般格式为: INSERT INTO tab_stude

从零开始学android&lt;数据存储(4)Sqlite数据库存储.三十八.&gt;

从前几章我们分别学习了属性文件存储输数据,内储存存储数据,和外部储存存储数据,今天我们来学习一下android 轻量级数据库Sqlite数据库的数据存储 首先必须了解SQLiteOpenHelper SQLiteDatabase类本身只是一个数据库的操作类,但是如果要想进行数据库的操作,还需要一个android.database.sqlite.SQLiteOpenHelper类帮助下才可以取得进行,但是,SQLiteOpenHelper类是一个抽象类,所以要使用的时候需要定义其子类,并且在子类中