Android SQLite 应用详解

作者: 辩护人 | 来源:发表于2016-12-08 22:37 被阅读1169次

    Android、iPhone等都使用SQLite作为数据库引擎,所以我们就需要掌握一些的SQLite的应用。

    SQL数据类型

    一般数据采用的固定的静态数据类型,而SQLite采用的是动态数据类型,会根据存入值自动判断。
    SQLite具有以下五种数据类型:

    数据类型 解释
    NULL 空值
    INTEGER 带符号的整型,具体取决有存入数字的范围大小。
    REAL 浮点数字,存储为8-byte IEEE浮点数
    TEXT 字符串文本。
    BLOB 二进制对象。

    基本的SQL语句

    1. 创建表

    • primary key:主键
    • autoincrement:自增型变量
    • if not exists :如果创建的表存在就不在创建

    "create table if not exists 表名 (id integer primary key autoincrement, 列名1,列名2, 列名3)"

    2. 增(插入)

    "insert into 表名(列名1,列名2,列名3) values(?,?,?)", new Object[]{列名1的值, 列名2的值, 列名3的值}

    3. 删

    "delete from person where 列名 = ?",new String[]{删除条件}

    4. 改(更新)

    "update person set 修改的列名 = ? where 修改的列名 = ?", new String[]{原来的值, 修改的值}

    5. 查

    "select * from person where 查询的列名 like ?",new String[]{条件}

    6.删除表

    drop table if exists 表名

    7.清空表

    delete from if exists 表名


    基本使用

    1.获取SQLiteDatabase对象

    SQLiteDatabase database = this.openOrCreateDatabase("person", MODE_PRIVATE, null);
    

    2.创建数据表

    database.execSQL("create table person (id integer primary key autoincrement, name, age, sex)");
    

    3.插入三行数据

    database.execSQL("insert into person(name,age,sex) values(?,?,?)", new Object[]{"小红", 18, "女"});
    database.execSQL("insert into person(name,age,sex) values(?,?,?)", new Object[]{"小明", 22, "男"});
    database.execSQL("insert into person(name,age,sex) values(?,?,?)", new Object[]{"小王", 25, "男"});
    

    4.修改数据

    database.execSQL("update person set name = ? where name = ?", new String[]{"小明", "小红"});
    

    5.查询数据

    注:一般通过cursor来得到查询数据,而且调用rawQuery来查询

    Cursor cursor = database.rawQuery("select * from person where name like ?",new String[]{"小明"});                
    //实例化一个对象                
    ArrayList<Map<String,Object>> list = new ArrayList<>();                
    //循环取值                
    while (cursor.moveToNext()){                    
    //获取数据                   
    String name = cursor.getString(1); //列按照从0开始算,1指的是name列
    String name = cursor.getString(cursor.getColumnIndex("name"));//或者可以这样写
    //实例化map对象                    
    Map<String,Object> map = new HashMap<>();                    
    //添加值                    
    map.put("name",name);                    
    //将map对象添加list中                    
    list.add(map);  
    }
    

    6.删除数据

    database.execSQL("delete from person where name = ?",new String[]{"小明"});
    

    一般使用

    • 一般情况下,我们都会新建一个类继承SQLiteOpenHelper,在其封装增删改查四种方法。
    • 在onCreate方法中,写创建表
    • 在onUpgrade方法中,它会根据版本号来更新表
    • 在封装方法时,记得传SQLiteDatabase的对象,因为所有对表的操作都是通过它来的
    public class MySQL extends SQLiteOpenHelper {        
      public MySQL(Context context, String name,SQLiteDatabase.CursorFactory factory, int version) { 
            super(context, name, factory, version);        
      }
            
      @Override        
      public void onCreate(SQLiteDatabase db) {            
      //创建表            
           db.execSQL("create table person (id integer primary key autoincrement, name, age, sex)");
      }
    
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
    {
        switch(newVersion){ 
          case 1: db.execSQL(第一个版本的建表语句); 
          case 2: db.execSQL(第二个版本的建表语句); 
          case 3: db.execSQL(第三个版本的建表语句); 
        }
    }
    
    • 使用时
    //实例化封装的SQL类
    MySQL mySQL = new MySQL(this, "dataCache.db", null, 1);
    //通过mySQL获取SQLiteDatabase对象
    SQLiteDatabase database = mySQL.getWritableDatabase();
    //之后通过mySQL调用封装方法
    

    相关文章

      网友评论

      本文标题:Android SQLite 应用详解

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