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調用封裝方法