Android 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)"); }@Overridepublic 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调用封装方法
评论