Android数据存储之SQLite的操作

  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 gay
09-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数据库(名字为前面定义的数据库名)。

 

时间: 2024-11-14 12:33:14

Android数据存储之SQLite的操作的相关文章

Android数据存储之SQLite使用_Android

SQLite是一款开源的.嵌入式关系型数据库,第一个版本Alpha发布于2000年.SQLite在便携性.易用性.紧凑性.高效性和可靠性方面有着突出的表现. 在Android中创建的SQLite数据库存储在:/data/data/<包名>/databases/目录下. 主要特点: -轻量级 -独立性,没有不依赖,无需安装 -跨平台,支持众多操作系统 -支持高达2TB大小的数据库 -每个数据库以单个文件的形式存在 -以B-Tree的数据结构形式存储在硬盘 SQLite的数据类型: SQLite支

详解Android数据存储—使用SQLite数据库

SQLite是Android自带的关系型数据库,是一个基于文件的轻量级数据库.Android提供了3种操作数据的方式,SharedPreference(共享首选项).文件存储以及SQLite数据库. SQLite数据库文件被保存在/data/data/package_name/databases目录下. 一.创建和删除表 1.创建表 创建表的SQL语句为: CREATE TABLE userInfo_brief ( id INTEGER PRIMARY KEY AUTOINCREMENT, na

Android数据存储之SQLite使用

SQLite是一款开源的.嵌入式关系型数据库,第一个版本Alpha发布于2000年.SQLite在便携性.易用性.紧凑性.高效性和可靠性方面有着突出的表现. 在Android中创建的SQLite数据库存储在:/data/data/<包名>/databases/目录下. 主要特点: -轻量级 -独立性,没有不依赖,无需安装 -跨平台,支持众多操作系统 -支持高达2TB大小的数据库 -每个数据库以单个文件的形式存在 -以B-Tree的数据结构形式存储在硬盘 SQLite的数据类型: SQLite支

《Android和PHP开发最佳实践》一2.6 Android数据存储

2.6 Android数据存储 前面刚介绍过上下文对象的使用,其最重要的功能之一,就是用于存储应用运行期间产生的中间数据.接下来,我们来讨论Android应用中持久化类型数据的存储方案.对于移动互联网应用来说,我们经常把核心数据存储在服务端,也就是我们常说的"云端",但是在实际项目中也会经常使用到Android系统内部的数据存储方案,接下来让我们认识一下几种最常用的数据存储方案. 2.6.1 应用配置(Shared Preferences) 在Android系统中,系统配置(Share

5种Android数据存储方式汇总_Android

本文介绍Android中的5种数据存储方式. 数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用SharedPreferences存储数据 2 文件存储数据 3 SQLite数据库存储数据 4 使用ContentProvider存储数据 5 网络存储数据 下面将为大家一一详细介绍. 第一种:使用SharedPreferences存储数据 SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置比

四种Android数据存储方式_Android

Android提供以下四种存储方式: SharePreference SQLite File ContentProvider Android系统中数据基本都是私有的,一般存放在"data/data/程序包名"目录下.如果要实现数据共享,正确的方式是使用ContentProvider.  SharedPreferenceSharedPreference是一种轻型的数据存储方式,实际上是基于XML文件存储的"key-value"键值对数据.通常用来存储程序的一些配置信息

Android 数据存储方式有哪几种_Android

以下内容给大家介绍Android数据存储提供了五种方式: 1.SharedPreferences 2.文件存储 3.SQLite数据库 4.ContentProvider 5.网络存储 本文主要介绍如何使用文件来存储数据.Android文件操作用到的是Java.IO中的FileOutputStream和FileInputStream类. 一.存储文件 首先实例化一个FileOutputStream. FileOutputStream foStream = openFileOutput(fileN

Android 数据存储方式有哪几种

以下内容给大家介绍Android数据存储提供了五种方式: 1.SharedPreferences 2.文件存储 3.SQLite数据库 4.ContentProvider 5.网络存储 本文主要介绍如何使用文件来存储数据.Android文件操作用到的是Java.IO中的FileOutputStream和FileInputStream类. 一.存储文件 首先实例化一个FileOutputStream. FileOutputStream foStream = openFileOutput(fileN

android数据存储之文件存储方法_Android

文件存储是 Android 中最基本的一种数据存储方式,它不对存储的内容进行任何的格式化处理,所有数据都是原封不动的保存到文件当中的. 概述 文件存取的核心就是输入流和输出流. Android文件的操作模式 文件的相关操作方法 文件读写的实现 openFileOutput和openFileInput方法 /** * openFIleOutput ,openFileInput * 这两种方法同sp一样只能讲文件保存到手机内存固定的路径中, * 默认为 /data/data/<packageName