【第22期】观点:IT 行业加班,到底有没有价值?

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

原创 2015年11月17日 17:25:58

使用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()获得。

写在最后

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

如有问题请评论指出!

版权声明:欢迎转载!请注明出处!http://blog.csdn.net/u011726984 举报

相关文章推荐

Android中联系人和通话记录详解(联系人的增删改查)(3)

转自:http://blog.csdn.net/wangjiang_qianmo/article/details/49002149    在上一章 Android中联系人和通话记录详解(2)中分析了...
  • h_025
  • h_025
  • 2017-05-04 09:16
  • 274

[Android] SQLite数据库之增删改查基础操作

在编程中经常会遇到数据库的操作,而Android系统内置了SQLite,它是一款轻型数据库,遵守事务ACID的关系型数据库管理系统,它占用的资源非常低,能够支持Windows/Linux/Unix等主...

Android 日历管理 Calendars的(日程、提醒)增删改查

package com.szwistar.emistar.calendar; import java.util.ArrayList; import java.util.Calendar; impor...

Android入门:增删改查通讯录

一、通讯录应用介绍 通讯录应用是Android自带的应用程序,我们看到此应用的时候,可能只认为这是一个应用,用数据库存储数据,但是实际上不是这样的。 通讯录是ContentProvider...

Android中内容提供者ContentProvider实现数据库增删改查

1.我们首先new一个我们自己的类集成ContentProvider,并实现方法如下 package com.wzw.sqllitedemo.providers; import com.wzw.s...

sqlLite数据库 实现对数据的增删改查 以及用list显示出数据内容

创建class:BlackNumberDBHelper 黑名单数据库的DBHelp

无废话Android 系列教程34 [使用系统api实现SQLite增删改查&&测试]

声明: 此代码依然在项目 “数据库_SqlLite” 项目基础上开发,如果没有此项目代码,请到33课教程的附件中下载!   1. com.andy.db.dao 包下新建立类 PersonDao2.java package com.andy.db.dao; import java.util.ArrayList; import java.util.L

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

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

Android成长之路-SQLite实现建表,增删改查,分页

先建表: 测试类: 实现增删改查:前奏: <img sr

Android中使用OrmLite来对SQLite数据库进行CRUD(增删改查)解析

Object Relational Mapping Lite (ORM Lite) provides some simple, lightweight functionality for persis...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)