关闭

Android学习之使用SQLite实现简单的(CRUD)增删改查

标签: androidsqlite
723人阅读 评论(0) 收藏 举报
分类:

使用SQlite实现简单的CRUD

首先需要一个帮助类继承SQLiteOpenHelper这个抽象类,如下:

public class DbHelper extends SQLiteOpenHelper {

    private static final int VERSION = 1;
    private static final String DB_NAME = "test.db";

    public static final String TABLE_NAME = "TEST";
    public static final String COLUMN_NAME_CONTENT = "content";
    private static final String CREATE_TABLE_SQL =
            "create table " + TABLE_NAME + "(id integer primary key autoincrement," +  COLUMN_NAME_CONTENT + " varchar)";

    public DbHelper(Context context) {
        /**
         * 第一个参数:当前activity实例
         * 第二个参数:数据库名称
         * 第三个参数:用来创建游标对象
         * 第四个参数:数据库版本号
         */
        super(context, DB_NAME, null, VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        // 数据库被创建后调用此方法
        // 该方法内用来初始化和创建表
        db.execSQL(CREATE_TABLE_SQL);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // 该方法用来更新数据库,可在此处更改表结构或删除表
         db.execSQL("drop table if exists TEST");
         onCreate(db);
    }

}

Note:因为对数据库的操作可能是耗时的,所以最好将对数据库的操作写在后台线程里(可以使用AsynTask,AsynTask的使用推荐此文:http://blog.csdn.net/liuhe688/article/details/6532519

以下为了代码简洁,只贴出实现代码

增加

@Override
protected Long doInBackground(String... params) {
    long rowId = 0;
    // 取得数据库写操作
    SQLiteDatabase db = mDbHelper.getWritableDatabase();
    // 创建ContentValues对象并设置键值对
    ContentValues cValues = new ContentValues();
    cValues.put(DbHelper.COLUMN_NAME_CONTENT, params[0]);

    // 开始事务
    db.beginTransaction();
    try {
        // 方式一:插入语句,返回新行的rowId
        /**
         * 第一个参数:表名
         * 第二个参数:设为null则不插入NULL行,否则会插入NULL行
         * 第三个参数:上面设置的键值对
         */
        rowId = db.insert(DbHelper.TABLE_NAME, null, cValues);
        // 方式二:注意''号和空格
        /*String sql = "insert into " + DbHelper.TABLE_NAME + " values(null,\'" + params[0] + "\')";
        Log.d(TAG, "sql:" + sql);
        db.execSQL(sql);*/

        // 提交事务,默认为false,会rollback
        db.setTransactionSuccessful();
    } finally {
         // 结束事务,如果不及时结束事务,数据库管理系统会在超时后帮你结束事务,但会影响并发性能
        db.endTransaction();        
    }
    return rowId;
}

推荐使用方式一,若使用方式二极容易出错,我就栽跟头过( ▼-▼ )。

删除

@Override
protected Long doInBackground(String... params) {
     SQLiteDatabase db = mDbHelper.getWritableDatabase();
    db.beginTransaction();
    try {

        long rowId = db.delete(
                DbHelper.TABLE_NAME,    // 表名
                "id=?",                 // where条件语句,根据id删除
                new String[]{params[1]} // where条件参数值
                );

         db.setTransactionSuccessful();
    } finally {
        db.endTransaction();        
    }
    return rowId;
}

更新

@Override
protected Long doInBackground(String... params) {
    // 取得数据库写操作
    SQLiteDatabase db = mDbHelper.getWritableDatabase();
    // 创建ContentValues对象并设置键值对
    ContentValues cValues = new ContentValues();
    cValues.put(DbHelper.COLUMN_NAME_CONTENT, params[2]);
    db.beginTransaction();
    try {
        long rowId = db.update(
                    DbHelper.TABLE_NAME,    // 表名
                    cValues,                // 要更新的值
                    "id=?",                 // where条件语句,根据id
                    new String[]{params[1]} // where条件参数值
            );

        db.setTransactionSuccessful();
    } finally {
        db.endTransaction();        
    }
    return rowId;
}

查询

@Override
protected String doInBackground(String... params) {
    SQLiteDatabase db = mDbHelper.getReadableDatabase();

    Cursor cursor = db.query(
                DbHelper.TABLE_NAME,            // 表名
                new String[]{"id", "content"},  // 要查询的列
                "id=?",                         // where子句,根据id来查询
                new String[]{params[0].toString()},// where子句条件的值
                null,                              // group分组
                null,                              // having条件
                "id DESC"                          // 根据id降序
        );

    String id = null, content = null;
    // 移动游标到结果集的首行,如果为真则依次取出游标所指的列索引所对应的值
    if (cursor.moveToFirst()) {
        for (int i = 0; i < cursor.getCount(); i++) {
            cursor.move(i);
            id = cursor.getString(cursor.getColumnIndex("id"));
            content = cursor.getString(cursor.getColumnIndex("content"));
        }
    }

    cursor.close(); // 关闭游标,释放它的所有资源并使它无效
    return content;
}

要查询在cursor中的行,使用cursor的其中一个move方法,但必须在读取值之前调用。一般来说应该先调用moveToFirst()函数,将读取位置置于结果集最开始的位置。

对每一行,我们可以使用cursor的其中一个get方法如getString()或getLong()获取列的值。对于每一个get方法必须传递想要获取的列的索引位置(index position),索引位置可以通过调用getColumnIndex()或getColumnIndexOrThrow()获得。

写在最后

代码有些粗糙,不过都有注释。

如有问题请评论指出!

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Android开发(10)使用SQLiteDatabase操作SQLite数据库实现增删改查(源码)

Android提供了一个名为SQLiteDatabase的类,该类封装了一些操作数据库的API,使用该类可以完成对数据进行添加(Create)、查询(Retrieve)、更新(Update)和删除(D...
  • sgx425021234
  • sgx425021234
  • 2013-06-04 23:54
  • 13291

学习Android的SQLite中增删改查功能!

文章目的:快速入门Android的SQLite增删改查功能! 前言:通过之前文章的学习,你已经掌握了快速创建和升级数据库的方法,接下来就该学习一下如何对表中的数据进行操作了。我们可以对数据进行的...
  • JavaAndroid730
  • JavaAndroid730
  • 2016-11-09 22:40
  • 2315

【Android】Sqlite数据库增删改查

Android系统内置一个Sqlite数据库,如果app需要使用Sqlite数据库数据库存储数据,Android会为此app生成一个.db文件。这个数据库在data/data//databases里面...
  • yongh701
  • yongh701
  • 2015-07-28 20:59
  • 8128

Android学习---数据库的增删改查(sqlite CRUD)

上一篇文章介绍了sqlite数据库的创建,以及数据的访问,本文将主要介绍数据库的增删改查. 下面直接看代码: MyDBHelper.java(创建数据库,添加一列phone) packa...
  • bfboys
  • bfboys
  • 2016-11-17 23:06
  • 176

Android储存---SQLite数据库的简单使用,实现增删改查

SQLite介绍 SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且目前...
  • dl10210950
  • dl10210950
  • 2016-09-15 12:36
  • 5633

[Android] 使用SQLite简单增删改查操作数据库 显示ListView中 源码

  • 2014-11-15 02:18
  • 1.39MB
  • 下载

Android中结合OrmLite for android组件对SQLite的CRUD(增删改查)操作实例(一)

本文中曾经提到过Ormlite的第三方组件包,Ormlite 是一种ORM工具,并且是一种轻量级别的工具。我们可以使用它来对Android中内嵌的sqlite数据库进行相关的操作。Android 的应...
  • chuchu521
  • chuchu521
  • 2012-09-08 11:22
  • 1214

Android中结合OrmLite for android组件对SQLite的CRUD(增删改查)操作实例

本博客文章中曾经提到过Ormlite的第三方组件包,Ormlite 是一种ORM工具,并且是一种轻量级别的工具。我们可以使用它来对Android中内嵌的sqlite数据库进行相关的操作。Android...
  • sxyx2008
  • sxyx2008
  • 2012-04-02 09:13
  • 594

Android下SQLite数据库学习笔记3——使用系统API实现数据库的增删改查

我们可以在代码中自己添加查询语句,但是不可避免的会发生错误,比如标点符号的问题,空格的问题,当自己的SQL语句写得多了,调试起来未免太过麻烦。所以,尽可能使用系统提供的API来操作数据库,同时也方便对...
  • chengjierui
  • chengjierui
  • 2015-08-25 19:43
  • 300

Android实现一个简单的SQLite数据库的增删改查

Android实现一个简单的SQLite数据库的增删改查
  • shaowanyunBLOG
  • shaowanyunBLOG
  • 2017-04-29 14:18
  • 643
    个人资料
    • 访问:265809次
    • 积分:3345
    • 等级:
    • 排名:第11705名
    • 原创:107篇
    • 转载:0篇
    • 译文:2篇
    • 评论:37条
    赞赏
    本文如果对您有所帮助,欢迎投食
    支付宝

    微信