Android中对数据的存储有很多种方式,Google为Andriod中较大的数据处理提供了SQLite数据库,SQLite是一款轻型的数据库,它在管理、使用和维护上非常强大。当然最主要的特点还是它的轻量级,适合在移动设备上使用。

今天主要来讲下最基本的SQLite数据库使用,让大家更了解SQLite一点。当然本人对SQLite的使用也是比较肤浅的,呵呵。

首先创建1个实体类来操作数据:

/**
 * 人
 *
 * @author yuzhentao
 */
public class Person {public int _id;
    public String name;
    public String age;

    public Person() {}public Person(String name, String age) {this.name = name;
        this.age = age;
    }}

然后是常量类,主要放了数据库名,因为接下来经常要使用:

/**
 * 常量
 *
 * @author yuzhentao
 */
public class Constants {public static final String TABLE_NAME_PERSON = "person";

}

Android中数据库的创建主要使用SQLiteOpenHelper,它是Android提供给我们一个数据库辅助类,用来创建或打开数据库。

所以创建一个类来继承SQLiteOpenHelper:

/**
 * 数据库帮助器
 *
 * @author yuzhentao
 */
public class DBHelper extends SQLiteOpenHelper {private static SQLiteDatabase db = null;
    private static final String DATABASE_NAME = "person.db";
    private static final int DATABASE_VERSION = 1;

    public DBHelper(Context context) {super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }@Override
    public void onCreate(SQLiteDatabase db) {db.execSQL("create table if not exists " + Constants.TABLE_NAME_PERSON + " (_id integer primary key autoincrement, name text, age text)");
    }@Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {db.execSQL("alter table person add column other string");
    }/**
     * 获取打开的本地数据库
     *
     * @param context:Context
     * @return SQLiteDatabase
     */
    public static synchronized SQLiteDatabase getOpenedDB(Context context) {if (db == null) {DBHelper dbHelper = new DBHelper(context.getApplicationContext());
            db = dbHelper.getWritableDatabase();
        }return db;
    }/**
     * 关闭本地数据库
     */
    public static void closeDB() {if (db != null) {db.close();
            db = null;
        }}}

onCreate()中创建数据库,onUpgrade()中更新数据库,getWritableDatabase()可以获取数据库实例。

数据库的操作主要是增删改查,相信大家都知道,我们可以使用数据库语言来对数据库进行操作,同时也可以使用SQLite提供的方法来做这些操作,所以我们一般会创建一个数据库管理器来对数据库进行操作:

/**
 * 数据库管理器
 *
 * @author violetjack
 */
public class DBManager {private SQLiteDatabase db;
    private static DBManager DBManager;

    public DBManager(Context context) {db = DBHelper.getOpenedDB(context);
    }public static DBManager getInstance(Context context) {if (DBManager == null) {DBManager = new DBManager(context.getApplicationContext());
        }return DBManager;
    }/**
     * 添加数据
     *
     * @param person:Person
     */
    public void add(Person person) {db.beginTransaction();
        try {db.execSQL("insert into " + Constants.TABLE_NAME_PERSON + " values (null, ?, ?)",
                    new Object[]{person.name, person.age});
            db.setTransactionSuccessful();
        } finally {db.endTransaction();
        }}/**
     * 根据ID删除数据
     *
     * @param id:时间
     */
    public void delete(int id) {db.delete(Constants.TABLE_NAME_PERSON, "_id = ?", new String[]{String.valueOf(id)});
    }/**
     * 清空数据
     */
    public void clear() {db.delete(Constants.TABLE_NAME_PERSON, "", new String[]{});
    }/**
     * 根据ID更新数据
     *
     * @param _id:ID
     * @param person:Person
     */
    public void update(int _id, Person person) {ContentValues cv = new ContentValues();
        cv.put("name", person.name);
        cv.put("age", person.age);
        db.update(Constants.TABLE_NAME_PERSON, cv, "_id = ?", new String[]{String.valueOf(_id)});
    }/**
     * 根据ID更新某个字段
     *
     * @param _id:ID
     * @param key:键
     * @param value:值
     */
    public void update(int _id, String key, String value) {ContentValues cv = new ContentValues();
        cv.put(key, value);
        db.update(Constants.TABLE_NAME_PERSON, cv, "_id = ?", new String[]{String.valueOf(_id)});
    }/**
     * /**
     * 查询数据
     *
     * @return ArrayList<Person>*/
    public ArrayList<Person> query() {ArrayList<Person> personList = new ArrayList<>();
        Cursor c = queryCursor(Constants.TABLE_NAME_PERSON);
        while (c.moveToNext()) {Person person = new Person();
            person._id = c.getInt(c.getColumnIndex("_id"));
            person.name = c.getString(c.getColumnIndex("name"));
            person.age = c.getString(c.getColumnIndex("age"));
            personList.add(person);
        }c.close();
        return personList;
    }/**
     * 查询指针
     *
     * @param tableName:表名
     * @return Cursor
     */
    public Cursor queryCursor(String tableName) {return db.rawQuery("select * from " + tableName, null);
    }}

怎么使用大家看代码就行,接下来是主界面中使用这些方法:

/**
 * 主界面
 *
 * @author yuzhentao
 */
public class MainActivity extends Activity implements View.OnClickListener {private Context context;

    private DBManager dbManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }@Override
    protected void onDestroy() {super.onDestroy();
        DBHelper.closeDB();
    }@Override
    public void onClick(View v) {int viewId = v.getId();
        switch (viewId) {case R.id.button_add_activity_main:dbManager.add(new Person("A", "20"));
                Toast.makeText(context, "增加一条数据", Toast.LENGTH_SHORT).show();
                break;
            case R.id.button_delete_activity_main:dbManager.delete(1);
                Toast.makeText(context, "删除一条数据", Toast.LENGTH_SHORT).show();
                break;
            case R.id.button_update_activity_main:dbManager.update(5, new Person("B", "20"));
                Toast.makeText(context, "更新一条数据", Toast.LENGTH_SHORT).show();
                break;
            case R.id.button_query_activity_main:for (Person person : dbManager.query()) {Log.e("yuzhentao", "name=" + person.name + ",age=" + person.age);
                }Toast.makeText(context, "查询一条数据", Toast.LENGTH_SHORT).show();
                break;
            case R.id.button_clear_activity_main:dbManager.clear();
                Toast.makeText(context, "清空数据", Toast.LENGTH_SHORT).show();
                break;
        }}private void initView() {context = this;
        findViewById(R.id.button_add_activity_main).setOnClickListener(this);
        findViewById(R.id.button_delete_activity_main).setOnClickListener(this);
        findViewById(R.id.button_update_activity_main).setOnClickListener(this);
        findViewById(R.id.button_query_activity_main).setOnClickListener(this);
        findViewById(R.id.button_clear_activity_main).setOnClickListener(this);
        dbManager = DBManager.getInstance(getApplicationContext());
    }}

一共有5个按钮,分别对应5增删改查和清空5种操作,其实清空也就是删除所有数据,更新可以更新某个字段,也可以更新所有字段。在onCreate()中获取数据库管理器的实例顺便打开数据库,别忘记在onDestroy()中关闭数据库。

这里我手机经过Root,然后通过某软件就可以看到数据库,大家可以看下点击按钮的效果:

查询就通过Log来看下:

03-21 21:10:09.133 16949-16949/yuzhentao.sqlitedemo E/yuzhentao: name=A,age=20
03-21 21:10:09.133 16949-16949/yuzhentao.sqlitedemo E/yuzhentao: name=A,age=20
03-21 21:10:09.133 16949-16949/yuzhentao.sqlitedemo E/yuzhentao: name=A,age=20
03-21 21:10:09.133 16949-16949/yuzhentao.sqlitedemo E/yuzhentao: name=B,age=20

Demo地址:http://download.csdn.net/detail/qq_23940659/9468587

Android学习之轻量级数据库SQLite相关推荐

  1. 【牛角书】轻量级数据库SQLite与H2比较

    对 PHP程序员来说,SQLite可以快速的搭建数据库开发环境,提供轻松.自容器.无配置.无独立服务的数据库环境,所有数据保存在一个文件里.当使用 MySQL 作为最终生产平台时,SQLite 是不可 ...

  2. 轻量级数据库sqlite,spring boot+sqlite的配置详解 (一)

    spring boot+sqlite的配置,及成功运行详解 sqlite数据库的安装与调试 首先,通过sqlite官方地址下载对应的安装包 https://www.sqlite.org/downloa ...

  3. 轻量级数据库sqlite,spring boot+sqlite的配置详解 (二)

    轻量级数据库sqlite,spring boot+sqlite的配置详解 (二) 轻量级数据库sqlite,spring boot+sqlite的配置详解 (一) 首先,需要创建一个spring bo ...

  4. 轻量级数据库sqlite的编译

    sqlite是很多客户端程序所使用的一种轻量级数据库,但是目前没有lib文件,只有源码和dll文件,我们可以利用VS工具生成lib,然后在应用程序中使用. (1)下载地址 http://www.sql ...

  5. 轻量级数据库Sqlite的使用

    SqLite是什么? SQLite是一个进程内的库,实现了自给自足的.无服务器的.零配置的.事务性的 SQL 数据库引擎.它是一个零配置的数据库,这意味着与其他数据库一样,您不需要在系统中配置. 就像 ...

  6. android开发中的数据库SQLite的使用

    其实学习android很久了,关于数据存储,之前学习的时候也一同学习过,编程这些东西很久没用都忘得差不多了,最近做个项目要用到,所以又学习了一遍. android中关于数据的存储有好几种,这次主要是S ...

  7. Android Studio自带数据库SQLite的用法部分总结

    SQLite是Android自带的一款轻量级的关系型数据库,它的运算速度非常快,且占用很少的资源,因而很适合在移动设备上使用.对于不熟悉连接外部数据库和添加删除数据的Android开发入门者来说,SQ ...

  8. c#中使用轻量级数据库sqlite开发总结

    首先简单说明下含义,sqlite数据库是一种轻量级的数据库,主要特点是免安装.免配置.简单小巧,在程序中的开发基本和sql数据库一致. 准备工具:system.data.sqlite.dll和sqli ...

  9. [Android学习系列8]数据库ormlite笔记

    一.下载包 http://ormlite.com/ http://ormlite.com/releases/ 把core包 和 android包   build path到项目里 二.参考资料 htt ...

最新文章

  1. CF231C To Add or Not to Add(思维,模拟)
  2. 32位汇编编程模板--使用masm6.15环境
  3. 一步一步教你写淡入淡出带注释的图片轮播插件(一)
  4. bert模型中的[CLS]、[UNK]、[SEP]
  5. php接口异常,api接口异常怎么办
  6. WPF疑难杂症之二(全屏幕窗口)
  7. macos php无法访问,Mac上,Apache启动正常,却无法访问localhost和127.0.0.1
  8. 连载 | 知识图谱发展报告 2018 -- 前言
  9. 95-140-116-源码-transform-算子union
  10. 黑客语言——Ruby
  11. 利用开源工具搭一套汉英翻译系统(二):词对齐
  12. 生活在继续,蜗牛在狂奔
  13. java 集合之Interface Map<K,V> HashMap实现类
  14. ACM2023SWJTU寒假选拔赛2不完全题解
  15. Spring-Core 中文翻译+总结文档(上)
  16. SSM框架和SSH框架的详细对比
  17. 哈工大青企联理事会圆满举办,数海信息CEO刘志欣当选第一届副会长
  18. 你应当了解的Docker底层技术
  19. 计算机人脸识别算哪个专业,人脸识别属于计算机什么领域
  20. 用python爬取外网

热门文章

  1. Acwing 第 95 场周赛
  2. Java程序员面试必备之深入理解自旋锁
  3. cinder连接mysql数据库_7.openstack_train_cinder安装
  4. 关于wprintf无法打印unicod中文字符的解决方法
  5. SpringBoot-07-之数据库JPA(CRUD)
  6. 离散化处理的原因及优势
  7. 【SpringBoot】一文了解SpringBoot热部署
  8. 深入浅出理解欧几里得算法的原理
  9. 链接脚本之bss段的清空
  10. windows的bat脚本编写