美文网首页
android数据存储-SQLite

android数据存储-SQLite

作者: quanCN | 来源:发表于2019-05-10 11:55 被阅读0次

简介

SQLite 是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是在世界上最广泛部署的 SQL 数据库引擎。SQLite 源代码不受版权限制。

数据类型

SQLite使用动态类型。内容可以存储为INTEGER,REAL,TEXT,BLOB或NULL。

创建数据库

在实际开发中,我们需要追寻一下步骤

  1. 确认目标数据库是否已经存在
  2. 如果不存在,首先创建数据库,然后创建数据库表以及必需的初始化数据
  3. 如果存在,打开并确认识是否是最新版本
  4. 如果是旧版本,就运行相关代码升级到最新版本

Android专门提供了一个SQLiteOpenHelper帮助类,该类有需要实现两个方法onCreate()onUpgrade(),实现数据库的创建和升级的逻辑

public class MyDatabases extends SQLiteOpenHelper {
    private final String CREATE_TABLE = "create table book( id varchar(20) primary key,name varchar(20),price REAL)";
    public MyDatabases(Context context,String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

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

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

增删改查

SQLiteOpenHelper有两个非常重要的的实例化方法getWritableDatabase()getReadableDatabase()都返回一个SQLiteDatabase对象用于执行不同的数据库逻辑

  • 添加数据
    添加数据需要使用ContentValues对象对数据进行封装
    MyDatabases myDatabases = new MyDatabases(this,"data.db",null,1);
    SQLiteDatabase sqLiteDatabase = myDatabases.getReadableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put("id","1");
    contentValues.put("name","thinking in java");
    contentValues.put("price","132.11");
    sqLiteDatabase.insert("book",null,contentValues);
    
  • 删除数据
    SQLiteDatabase提供了一个delete()方法:
    int delete(String table, String whereClause, String[] whereArgs){}
    whereClause为约束条件,whereArgs为约束条件对应的值
    MyDatabases myDatabases = new MyDatabases(this,"data.db",null,1);
    SQLiteDatabase sqLiteDatabase = myDatabases.getReadableDatabase();
    sqLiteDatabase.delete("book","id = ?",new String[]{"1"});
    
  • 修改数据
    修改数据提供了一个update()方法:
    update(String table, ContentValues values, String whereClause, String[] whereArgs) {}
    values为更新的数据,whereClause为约束条件,whereArgs为约束条件对应的值
    ContentValues contentValues = new ContentValues();
    contentValues.put("name","java"); 
    sqLiteDatabase.update("book",contentValues,"id = ?",new String[]{"1"});
    
  • 查询
    重载了多个query(),最复杂的如下
    public Cursor query(boolean distinct, String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit, CancellationSignal cancellationSignal) {}
参数 详解
distinct 设置为true,每一行的数据必须唯一,否则flase
table 表名
columns 需要查询的字段,null为全部查询
selection where约束条件
selectionArgs 为where约束条件提供具体的值
groupBy 指定需要group by的列
having 对group by后的结果进行约束
orderBy 对查询结果进行排序
limit 用于设置查询行数
cancellationSignal 取消操作的信号,一般用于设置查询取消时的后续操作
Cursor cursor = sqLiteDatabase.query("book",null,null,null,null,null,null);
List<Book> books = new ArrayList<>();
if(cursor.moveToFirst()){
    Book book;
    do{
        //遍历Cursor对象,取出数据并打印
        book = new Book(cursor.getString(cursor.getColumnIndex("id")), cursor.getString(cursor.getColumnIndex("name")),
cursor.getDouble(cursor.getColumnIndex("price")));
        books.add(book);
    }while(cursor.moveToNext());
}
Log.d("data", books+"s");

相关文章

网友评论

      本文标题:android数据存储-SQLite

      本文链接:https://www.haomeiwen.com/subject/vxoooqtx.html