Android 数据存储:五大存储之SQLite数据存储

一、SQLite介绍

SQLite优点:

1、轻量级 ,可移植性好,它是进程内的数据库引擎,使用SQLite一般只需要带上它的一个动态库。
2、绿色软件 –它的核心引擎本身不依赖第三方的软件,Android系统集成的。
3、单一文件 –就是数据库中所有的信息(比如表、视图、触发器、等)都包含在一个文件内。这个文件可以copy到其它目录或其它机器上,也照用不误。
4、内存数据库

SQLite缺点:

1、比较耗电
2、并发访问的锁机制,SQLite在并发(包括多进程和多线程)读写方面的性能一直不太理想。数据库可能会被写操作独占,从而导致其它读写操作阻塞或出错
3、SQL标准支持不全

二、基本使用(增删改查)

创建数据库

  想要使用SQLite我们首先要创建一个数据库,这里需要创建一个class继承SQLiteOpenHelper。
 Android为了让我们更方便的管理数据库,专门给提供了一个QLiteOpenHelper帮助类。它是一个抽象类有两个抽象方法,具体如下:
 

MySQLite类
package com.example.mysqlitedemo;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class Mydbsqlite extends SQLiteOpenHelper{
    //创建数据库
    public Mydbsqlite(Context context, String name, CursorFactory factory,
            int version) {
        super(context, name, factory, version);

    }
    public Mydbsqlite(Context context, String name){
        this(context, name, null, 1);
        //反调上面的构造器
    }
    //创建table表,只要有表存在的时候不会再执行这个方法
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table if not exists logtable(id integer not null primary key autoincrement,name verchar(20),password verchar(20) )");

    }
   //用于版本升级,需要更新版本时只需要将新的版本号数值比以前的大
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    }
}
MainActivity
public class MainActivity extends AppCompatActivity {
private Mydbsqlite helper;
    private SQLiteDatabase db;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        helper=new MyOpenHelper(getApplication(),TableConfig.TABLE_WORK_DAILY);
        db=helper.getWritableDatabase();
    }

    }
    }

查看表路径

DDMS——File Explorer——data——data——包名加类名——database

数据库的增加语句insert
db.insert(table, nullColumnHack, values)
参数解释:

table:表名
nullColumnHack:代表强行插入null值得数据列的列名。当values参数为null或不包含KEY—values对时该参数有效。
values:ContentValues值(类似于MAP),这里需要创建一个ContentValues值。通过put方法填入要出入的内容。

实例
private void insertdb() {
        ContentValues values=new ContentValues();
        values.put("name", met_username.getText().toString());
        values.put("password",met_password.getText().toString());
        db.insert("logtable", null, values);

    }

数据库的删除语句
    db.delete(table, whereClause, whereArgs)
参数解释:

whereClause:满足该whereClause子句的记录将会被删除
whereArgs:用于为whereClause子句传入参数

实例
private void deletedb() {
        db.delete("logtable", "name=?", new String[]{"zhangsan"});
        Toast.makeText(getApplicationContext(), "删除成功", Toast.LENGTH_LONG).show();

    }

数据库的改语句:
db.update(table, values, whereClause, whereArgs);
参数解释:

whereClause:满足该whereClause子句的记录将会被更新
whereArgs:用于为whereClause子句传入参数

实例
    private void updatedb() {
        ContentValues values=new ContentValues();
        values.put("password", "123455abc");
        db.update("logtable", values, "name=?", new String[]{"zhangsan"});
        Toast.makeText(getApplicationContext(), "修改成功", Toast.LENGTH_LONG).show();

    }

数据库的查询语句

方式一

    db.rawQuery(sql, selectionArgs)

方式二:

db.query(distinct,table, columns, selection, selectionArgs, groupBy, having, orderBy)
参数解释:

columns:要查询出来的列名
selection:查询条件子句,相当于select语句where关键字后面的部分,在条件子句允许使用占位符“?”
selectionArgs:对应于selection语句中占位符的值,值在数组中的位置与占位符在语句中的位置必须一致,否则就会有异常。
groupBy:用于控制分组
having:用于对分组进行过滤
orderBy:排序方式(ASC升序 DESC 降序)
limit:用于进行分页

实例
private void selectdb() {
    Cursor cursor=db.query("logtable", null, null, null, null, null, "id DESC limit 2 offset 3");
    //offset抛弃最后两条,显示这两条上面那三条,offset主要用于分页显示的时候
    //orderBy id DESC 按照id列进行降序排列
    //db.rawQuery("select *from logtable", null);
    cursor.moveToFirst();
    while(!cursor.isAfterLast()){
        String name=cursor.getString(cursor.getColumnIndex("name"));
        String password=cursor.getString(cursor.getColumnIndex("password"));
        Log.d("用户名", name);
        Log.d("密码", password);
        cursor.moveToNext();
    }

    }

注:

Cursor cursor=db.query("logtable", null, null, null, null, null, "id DESC ","2,3");
//2:偏移量
//3:显示数量
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值