Android 使用sqlite时 可以用到的2个工具类

来源:互联网 发布:vb编程软件下载 编辑:程序博客网 时间:2024/04/29 06:55
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 欢迎..


0 0
原创粉丝点击