Android 使用sqlite時 可以用到的2個工具類
阿新 • • 發佈:2019-02-19
package com.xu.my.util.database; /** * Created by xuguang on 14-11-30. */ public class Column { public static enum Constraint { UNIQUE("UNIQUE"), NOT("NOT"), NULL("NULL"), CHECK("CHECK"), FOREIGN_KEY("FOREIGN KEY"), PRIMARY_KEY("PRIMARY KEY"); private String value; private Constraint(String value) { this.value = value; } @Override public String toString() { return value; } } public static enum DataType { NULL, INTEGER, REAL, TEXT, BLOB } private String mColumnName; private Constraint mConstraint; private DataType mDataType; public Column(String mColumnName, DataType mDataType, Constraint mConstraint) { this.mColumnName = mColumnName; this.mDataType = mDataType; this.mConstraint = mConstraint; } public String getmColumnName() { return mColumnName; } public Constraint getmConstraint() { return mConstraint; } public DataType getmDataType() { return mDataType; } }
這個Column類封裝了 sqlite3 儲存資料的型別 和 儲存資料的約束條件
sqlite3儲存資料的型別
NULL:標識一個NULL值
INTERGER:整數型別
REAL:浮點數
TEXT:字串
BLOB:二進位制數
sqlite3儲存資料的約束條件
Sqlite常用約束條件如下:
PRIMARY KEY - 主鍵:
1)主鍵的值必須唯一,用於標識每一條記錄,如學生的學號
2)主鍵同時也是一個索引,通過主鍵查詢記錄速度較快
3)主鍵如果是整數型別,該列的值可以自動增長
NOT NULL - 非空:
約束列記錄不能為空,否則報錯
UNIQUE - 唯一:
除主鍵外,約束其他列的資料的值唯一
CHECK - 條件檢查:
約束該列的值必須符合條件才可存入
DEFAULT - 預設值:
列資料中的值基本都是一樣的,這樣的欄位列可設為預設值
這沒有外來鍵約束是因為 在sqlite3會解析外來鍵約束但是不會去執行它,我們如果要在sqlite 裡建立外來鍵 需要寫3個觸發器 insert updata delete 操作之前的觸發器
SQLiteTable.java :
package com.xu.my.util.database; import android.database.sqlite.SQLiteDatabase; import android.provider.BaseColumns; import java.util.ArrayList; /** * Created by xuguang on 14-11-30. */ public class SQLiteTable { String mTableName; ArrayList<Column> mColumnsDefinitions = new ArrayList<Column>(); public String getmTableName(){ return mTableName; } /** * aotu add primary key BaseColumns._ID * * @param mTableName */ public SQLiteTable(String mTableName){ this.mTableName=mTableName; mColumnsDefinitions.add(new Column(BaseColumns._ID, Column.DataType.INTEGER, Column.Constraint.PRIMARY_KEY)); } public SQLiteTable addColum(Column columnsDefinition){ mColumnsDefinitions.add(columnsDefinition); return this; } public SQLiteTable addColum(String columnName,Column.DataType dataType){ mColumnsDefinitions.add(new Column(columnName,dataType,null)); return this; } public SQLiteTable addColumn(String columnName, Column.Constraint constraint, Column.DataType dataType) { mColumnsDefinitions.add(new Column(columnName, dataType, constraint)); return this; } public void create(SQLiteDatabase db){ String formatter = " %s"; StringBuilder stringBuilder= new StringBuilder(); stringBuilder.append("CREATE TABLE IF NOT EXISTS"); stringBuilder.append(mTableName); stringBuilder.append("("); int columnCount = mColumnsDefinitions.size(); int index = 0; for(Column columnDefinition : mColumnsDefinitions){ stringBuilder.append(columnDefinition.getmColumnName()).append( String.format(formatter,columnDefinition.getmDataType().name())); Column.Constraint constraint=columnDefinition.getmConstraint(); if(constraint != null){ stringBuilder.append(String.format(formatter,constraint.toString())); } if(index < columnCount-1){ stringBuilder.append(","); } index++; } stringBuilder.append(");"); db.execSQL(stringBuilder.toString()); } public void delete(final SQLiteDatabase db) { db.execSQL("DROP TABLE IF EXISTS " + mTableName); } }
這個SQLiteTable類是用來鍵表的 裡面create 就是建立表
如果我們要建立表就可以這樣:
public static final SQLiteTable TABLE = new SQLiteTable(TABLE_NAME)
.addColum(ID, Column.DataType.INTEGER)
.addColum(CATEGORY,Column.DataType.INTEGER)
.addColum(JSON,Column.DataType.TEXT);
}
TABLE.create(db);
這裡需要提醒的是: sqlite
REATE TABLE IF NOT EXISTS
這條建表語句是 當表不存在時就建立. 如果我們使用REATE TABLE
如果有這張表 這個會返回錯誤.
Android studio交流QQ群: 375815591 歡迎..