IT虾米网

# 安卓五大存储方式之SQlite

xmjava 2022年05月05日 手机开发 185 0

关于重新认识SQlite(一)

虽然做安卓接触到数据库的机会没有后台那么多,但是最近发现还是有蛮多机会会遇到,做了五年安卓倒是提起SQlite还要请教后台的同事,让我感到分外惭愧,所以今天决定重新认识下SQlite。

常用数据库的种类

Oracle、MySQL、SQLSever,SQlite等

SQlite简介

SQlite是目前为止比较流行的开源嵌入式数据库,属于轻量级跨平台的关系型数据库,其主要优势在于灵巧、快速可靠性高,并且占用资源非常低,能够支持多个主流的操作系统,例如Windows/Linux/Unix等等。

Android对于SQlite的使用

Android提供SQLiteOpenHelper.java作为数据库辅助操作工具类

第一步:创建类DatabaseHelper.class(可任意命名)继承SQLiteOpenHelper.java

public class DatabaseHelper extends SQLiteOpenHelper{
   
     
    //带全部参数的构造函数,此构造函数必不可少 
    // 参数说明 
    // context:上下文对象 
    // name:数据库名称 
    // param:一个可选的游标工厂(通常是 Null)  
    // version:当前数据库的版本,值必须是整数并且是递增的状态 
    public DatabaseHelper(Context context, String name, CursorFactory factory, int version) {
   
     
        super(context, name, factory, version); 
    } 
    @Override 
    public void onCreate(SQLiteDatabase db) {
   
     
        /** 
         *创建数据库sql语句并执行  user: 表名称   name: 字段名称 
         * 注:数据库实际上是没被创建 / 打开的(因该方法还没调用) 
         * 直到getWritableDatabase() / getReadableDatabase() 第一次被调用时才会进行创建 / 打开  
         */  
        //String sql = "create table user(name varchar(20))"; 
        String sql = "create table user(id integer primary key auto_increment,name varchar(64))";  
        db.execSQL(sql);     
    } 
    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
   
     
    } 
} 

知识细节延伸
1、id integer primary key auto_increment
id:字段名称
integer :字段类型
primary key:主键
autoincrement:通过设置主键进行自增长,默认从1开始,每次+1

2、SQLite 中有五种存储类型: NULL、INTEGER、REAL、TEXT、BLOB、VARCHAR等
SQLite数据库中的存储类型汇总
表中字段user可以使用text 或者varchar 类型,我选择使用varchar ,因为varchar 可以提供默认值,text 没有。

3、varchar(20)表示:
表示字符数,也就是,不论中文还是英文还是标点,加起来只能有20个。
表中字段名称user可以使用TEXT

第二步:创建数据库

 DatabaseHelper dbHelper = new DatabaseHelper(MainActivity.this, "数据库名称", null, 1); 
 db = dbHelper.getWritableDatabase();//可读写的数据库 
 // db = dbHelper.getReadableDatabase();//只读数据库 

此处我创建的时可读写的数据库

1、SQLiteOpenHelper类 常用方法

  • 创建数据库
    getWritableDatabase()
    创建/打开可读写的数据库(通过 返回的SQLiteDatabase对象 进行操作)

    getReadableDatabase()
    创建/打开可读的数据库(通过 返回的SQLiteDatabase对象 进行操作)

    onCreate(SQLiteDatabase db)
    数据库第1次创建时 则会调用,即 第1次调用 getWritableDatabase() / getReadableDatabase()时调用

    onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
    数据库升级时自动调用

    close()
    关闭数据库

  • 数据库操作(增、删、减、查)

    查询数据
    (Cursor) query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)

    // 查询指定的数据表返回一个带游标的数据集。
    // 各参数说明:
    // table:表名称
    // colums:列名称数组
    // selection:条件子句,相当于where
    // selectionArgs:条件语句的参数数组
    // groupBy:分组
    // having:分组条件
    // orderBy:排序类
    // limit:分页查询的限制
    // Cursor:返回值,相当于结果集ResultSet
    使用示例:

 //创建游标对象 
Cursor cursor = sqliteDatabase.query("user", new String[] {
   
     "id","name" }, "id=?", new String[] {
   
     "1" }, null, null, null); 
cursor.close()// 关闭游标,释放资源 

(Cursor) rawQuery(String sql, String[] selectionArgs)
直接使用SQL语句进行查询的:SQL语句,条件参数
使用示例:

//写法一: 
String sql = "select * from user where name=?";  
Cursor cursor = db.rawQuery(sql, new String[]{
   
    "文阿花"});   
 
//写法二: 
String sql = "select * from user where name=文阿花";  
Cursor cursor = db.rawQuery(sql, null);   

query和rawQuery区别:
query是帮你拼接好了sql语句
rawQuery是使用你自己拼接的sqp语句
query比起rawQuery来说 可以避免因sql拼写错误儿导致的错误

(int) delete(String table,String whereClause,String[] whereArgs)
删除数据行
使用示例:

 //根据主键去删除对应数据 
 // 参数1:表名(String) 
 // 参数2:WHERE表达式(String),需删除数据的行; 若该参数为 null, 就会删除所有行;?号是占位符 
 // 参数3:WHERE选择语句的参数(String[]), 逐个替换 WHERE表达式中 的“?”占位符; 
 db.delete("user", "id?",new String[]{
   
    "1"}); 

对应sql语句:

String sql = "delete from user where id="1"; 
db.execSQL(sql); 

(long) insert(String table,String nullColumnHack,ContentValues values)
添加数据行

使用示例:

 //创建存放数据的ContentValues对象  insertData需要插入的内容 
 ContentValues values = new ContentValues(); 
 values.put("id", 1); 
 values.put("name", "文阿花"); 
 //数据库执行插入命令 
 db.insert("user", null, values); 

对应sql语句:

 String sql = "insert into user (id,name) values (1,'文阿花')"; 
 db.execSQL(sql)

(int) update(String table, ContentValues values, String whereClause, String[] whereArgs)
更新数据行
使用示例:

 ContentValues values2 = new ContentValues(); 
 values2.put("name", "文阿花2"); 
 db.update("user", values2, "id= ?", new String[]{
   
    "1"}); 

对应sql语句:

 String sql = "update [user] set name = '文阿花2' where id="1"; 
 db.execSQL(sql); 

(void) execSQL(String sql)
执行一个SQL语句,可以是一个select or 其他sql语句
使用示例:

  //创建数据库sql语句 并 执行 
 String sql = "create table user(name varchar(20))"; 
 db.execSQL(sql);    

deleteDatabase(“数据库名”);
删除数据库

参考文章

Android:SQLiteOpenHelper类(SQLlite数据库操作)详细解析

SQLite数据库中的存储类型汇总


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

ArcGIS for Android100.10.0入门(一)