SQLite的基本操作

看了郭神的Android数据库高手秘籍,总结一下 SQLite 的基本操作:

SQLite 是一个进程库,实现了自给自足的、无服务器的、零配置的、事务性的轻量级的 SQL 数据库引擎,就像其他数据库,SQLite 引擎不是一个独立的进程,可以按应用程序的需求进行静态或动态的连接,SQLite 直接访问其存储文件。

创建新表

创建自己的数据库,继承抽象类 SQLiteOpenHelper()方法,重写 onCreate() 和 onUpgrade() 方法:

public class MySQLiteHelper extends SQLiteOpenHelper{
    public static final String CREATE_NEWS = "create table news (" +
                         "id integer primary key autoincreament, " +
                         "title text," +
                         "content text," +
                         "publishdate text," +
                         "commentcount integer)";

    public MySQLiteHelper(Context context, String name, CursorFactory factory, int version){
        super(context, name, factory, version);
    }

    @Override
    public void onCreate(SQLiteDatabase db){
        db.execSQL(CREATE_NEWS);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
    }
}

在 MainActivity 中使用时,需要先创建对象:

MySQLiteHelper dbHelper = new MySQLiteHelper(this, "news", null, 1);
SQLiteDatabase dbWriter = dbHelper.getWritableDatabase();
SQLiteDatabase dbReader = dbHelper.gerReadableDatabase();

其实 news 的建立如果不是 String 类型,应该如下所示:

create table news (
        id integer primary key autoincrement,
        title text,
        content text,
        publishdate text,
        commentcount integer)

正是定义为一个 String 类型,所以才会有「+、“”」 。

CRUD 方法详解,用具体的实例去具体化每一个方法,从实际的需求的角度思考每个方法。
insert()
public long insert(String table, String nullColumnHack, ContentValues values)

table:代表表名

nullColumnHack:一般为null,当values参数为空或者里面没有内容的时候,我们insert是会失败的(底层数据库不允许插入一个空行),为了防止这种情况,我们要在这里指定一个列名,到时候如果发现将要插入的行为空行时,就会将你指定的这个列名的值设为null,然后再向数据库中插入。

values:代表要插入的数据,为一个ContentValues对象,通过键值对存储数据

SQLiteDatabase dbWriter = dbHelper.getWitableDatabase();
ContentValues values = new ContentValues();
values.put("title","这是一条新闻");
long id = db.insert("news", null, values);

表示在 news 表中插入 values 的值

delete()
public int delete(String table, String whereClause, String[] whereArgs)

table:代表表名

whereClause:代表要删的内容的列

whereArgs:代表要删除内容的列中行的具体约束

SQLiteDatabase db = dbHelper.getWitableDatabase();
db.delete("news", "commentcount = ?", new String[]{"0"});

表示删除 news 表中 commentcount 评论数为0的列。

update()
public int updata(String table, Contentvalues values, String whereClause, String[] whereArgs)

table:代表表名

values:代表要更新的内容

whereClause:代表要更新的表中列的位置

whereArgs:代表对更新的列的位置进行进一步约束,表示列中的某行

SQLiteDatabase db = dbHelper.getWitableDatabase();
ContentValues values = new ContentValues();
values.put("title","今天放假");
db.updata("news", values, "id = ?", new String[]{"2"});

表示更新 news 表中的 id=2 的 title 中的内容为 「今天放假」。

query()
public Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)

table:代表表名

columns:表示查询哪几列,如果不指定则默认查询所有列

selection表示:设置条件,约束查询某一行或某几行的数据,不指定则默认是查询所有行的数据,相当于 SQL 语句中的 where, null 表示不进行筛选。

selectionArgs:表示配合 selection 参数使用的,如果你在第三个参数是 selection = ?,那么在 selectionArgs 的进一步约束,查找某些特定的行

groupBy:表示对选中的列中的行内容进行分组,若为空则不分组

having:表示分组的依据条件,若为空返回全部,就是不分组

orderBy:表示排序方式

limit:表示限制返回记录的条数,为空表示不限制。

针对于 SQLite,脑海中最好有一张表,增删改查就是对表中的行和列内容的操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值