基于Android SQLite语句构建库的轮子

觉得手动写SQL语句很烦?不妨试试这个轮子*-*

0.此轮子地址

ZxySQLiteCreate

1.介绍

  此库是专门用于SQL语句构建,基本常用的SQL语句笔者已经封装在此库中,你可以轻轻松松构建一条建表语句,where语句等。

2.基本用法:

2.1 增加相关

2.1.1 创建表

1.如何创建一个名字为Student的表?

 String createTableSql = CreateTable.getInstance().setTableName("Student")
            .addField(SQLField.getOrdinaryField("name","text"))
            .addField(SQLField.getPrimaryKeyField("id","integer(10)",true))
            .createSQLIfNotExists();

 输出的SQL语句:
 CREATE TABLE IF NOT EXISTS Student(name text,id integer(10)  PRIMARY KEY AUTOINCREMENT);

 String createTableSql = CreateTable.getInstance().setTableName("Student")
            .addField(SQLField.getOrdinaryField("name","text"))
            .addField(SQLField.getPrimaryKeyField("id","integer(10)",true))
            .createSQL();

输出的SQL语句:
CREATE TABLE Student(name text,id integer(10)  PRIMARY KEY AUTOINCREMENT);

方式非常简单,通过CreateTable类进行构建,SQLField是指数据库中的Field属性,你可以自己查看SQLField类查看如何构建对应的数据库字段类型,笔者已经封装好了。如下所示:

 SQLField.getPrimaryKeyField("id","integer",true)->id integer PRIMARY KEY AUTOINCREMENT
 SQLField.getOrdinaryField("name","text")->name text  
 SQLField.getContainsDefaultValueField("name","text(20)","Ellen")->name text(20)  DEFAULT 'Ellen' NOT NULL  
 SQLField.getNotNullValueField("name","text(20)")->name text(20) NOT NULL  
 SQLField.getAutoEndStringField("name","text(20)","NOT NULL")->name text(20) NOT NULL(注意此方式为自定义方式,如果笔者给出的几种构建Field的方式不太满足你的需求,请使用这种方式构建)

还可以通过下面这种方式构建出你想要的任何类型的SQLField哦,至于这些方法的作用,聪明的你无需笔者啰嗦吧:

//通过全约束构建模式进行构建
SQLField sqlField =  SQLField.getInstance("a","text(20)")
                             .setMajorKey(true)
                             .setNotNull(true)
                             .setAuto(true)
                             .setUnique(true)
                             .setCheckWhereSql("a > 8")
                             .setDefaultValue("4")
                             .createSqlFiled();//构建完成以后必须调用createSqlFiled方法

2.1.2 增加数据到数据库

1.如何添加一条数据到Student表?

String sql = AddSingleRowToTable.getInstance()
            .setTableName("student")
            .addData(new Value("id",1))
            .addData(new Value("name","Ellen2018"))
            .addData(new Value("age",23))
            .createSQL();

输出的SQL语句:
INSERT INTO student (id,name,age) VALUES(1,'Ellen2018',23);

2.如何增加多条数据到student表中?

    List<String> fieldNameList = new ArrayList<>();
    fieldNameList.add("name");
    fieldNameList.add("phone");
    fieldNameList.add("address");
    List<Object> objects1 = new ArrayList<>();
    objects1.add("Ellen");
    objects1.add("18272167476");
    objects1.add("火星居2813");
    List<Object> objects2 = new ArrayList<>();
    objects2.add("Ellen");
    objects2.add("18272167476");
    objects2.add("火星居2813");
    String addManyDataSql = AddManyRowToTable.getInstance()
            .setTableName("student")
            .addFieldNameList(fieldNameList)
            .addValueList(objects1)
            .addValueList(objects2)
            .createSQL();

输出的SQL语句:
INSERT INTO student (name,phone,address) VALUES ('Ellen','18272167476','火星居2813'),('Ellen','18272167476','火星居2813');

2.2 删除相关

2.2.1 删除表中的数据

1.如何删除name=“Ellen2018” 且 age < 23的数据?

    //删除name="Ellen2018" 且 age<23的数据
    //首先构建where语句
    String whereSQL = Where.getInstance(false)
            .addAndWhereValue("name", WhereSymbolEnum.EQUAL,"Ellen2018")
            .addAndWhereValue("age",WhereSymbolEnum.LESS_THAN,23)
            .createSQL();
    String deleteSQL = DeleteTableDataRow.getInstance()
            .setTableName("Student")
            .createSQLAutoWhere(whereSQL);

输出的SQL语句:
DELETE FROM Student WHERE name = 'Ellen2018' AND age < 23;

2.2.2 删除表中的字段

1.删除student表中的age字段

String sql = DeleteTableColumn.getInstance()
            .setTableName("student")
            .addColumnName("age")
            .createSQL();

输出的SQL语句:
ALTER TABLE student DROP COLUMN age;

2.2.3 删除表

1.删除表student

String sql = DeleteTable.getInstance()
            .setTableName("student")
            .createSQL();

输出的SQL语句:
DROP TABLE student;

2.3 修改相关

2.3.1 修改表的名字

1.将表名为student的表修改为student_new

String sql = UpdateTableName.getInstance()
            .setOldTableName("student")
            .setNewTableName("student_new")
            .createSQL();

输出的SQL语句:
ALTER TABLE 'student' RENAME TO 'student_new';

2.3.2 修改表中的数据

1.将 age >= 25 且 name=“Ellen2018"的name修改为"未知”

    //将 age >= 25 且 name="Ellen2018"的name修改为"未知"
    String whereSQLUpdate = Where.getInstance(false)
            .addAndWhereValue("name", WhereSymbolEnum.EQUAL,"Ellen2018")
            .addAndWhereValue("age",WhereSymbolEnum.MORE_THAN_EQUAL,25)
            .createSQL();
    String updateSQL = UpdateTableDataRow.getInstance()
            .setTableName("Student")
            .addSetValue("name","未知")
            .createSQLAutoWhere(whereSQLUpdate);

输出的SQL语句:
UPDATE Student SET name='未知' WHERE name = 'Ellen2018' AND age >= 25;

2.3.3 修改表中字段的名字 & 类型

1.将student表的age列名修改为age_new?

String sql = UpdateTableColumn.getInstanc()
            .setTableName("student")
            .setTargetFieldName("age")
            .setNewFieldName("age_new")
            .createSQL();

输出的SQL语句:
EXEC sp_rename 'student.[age]','age_new','COLUMN';

2.将student表的name列名修改为name_new,且字段类型为text(20)非空?

String sql = UpdateTableColumn.getInstanc()
            .setTableName("student")
            .setTargetFieldName("age")
            .setNewSqlField(SQLField.getNotNullValueField("name_new","text(20)"))
            .createSQL();

输出的SQL语句:
ALTER TABLE student CHANGE age name_new text(20)  NOT NULL;

2.4 查询相关

2.4.1 查询表是否存在

String sql = SerachTableExist.getInstance()
            .setTableName("student")
            .createSQL();

输出的SQL语句:
SELECT * FROM sqlite_master WHERE type='table' AND name='student';

注意这段语句如果能获取到数据,则表明表是存在的,反之则不存在。

2.4.2 查询表中的数据

1.查询Student表中所有的数据

String serachAll = SerachTableData.getInstance()
         .setTableName("Student")
         .getTableAllDataSQL(null);//这里面传入null代表按照表的顺序排列,传入Order语句则按照Order语句进行排列

输出的SQL语句:
SELECT * FROM Student;

2.查询Student表中age > 20的所有学生的name和id,且查询的顺序按照id进行升序排序

    String whereSQLSerach = Where.getInstance(false)
            .addAndWhereValue("age",WhereSymbolEnum.MORE_THAN,20)
            .createSQL();
    String orderSQL = Order.getInstance(false)
            .setFirstOrderFieldName("id")
            .setIsDesc(true)
            .createSQL();

    String searcSQL  = SerachTableData.getInstance()
            .setTableName("Student")
            .setIsAddField(true)
            .addSelectField("name")
            .addSelectField("id")
            .createSQLAutoWhere(whereSQLSerach,orderSQL);

输出的SQL语句:
SELECT name,id FROM Student WHERE age > 20 ORDER BY id DESC;

2.5 Where语句构建

2.5.1 Where语句使用

1.当age大于20且名字(name字段)姓李?

String sql = Where.getInstance(false)//这里的false代表构建的SQL不带有Where,反之,则带
            .addAndWhereValue("age", WhereSymbolEnum.MORE_THAN_EQUAL, 20)
            .addAndWhereValue("name", WhereSymbolEnum.LIKE, "李%")
            .createSQL();

输出的SQL语句:
age >= 20 AND name LIKE '李%'

2.5.2 WhereIn语句使用

1.选择学校(字段为school_name)在"a",“b”,"c"的数据?

String sql = WhereIn.getInstance(false)
            .setFieldName("school_name")
            .addInValue("a")
            .addInValue("b")
            .addInValue("c")
            .createSQLWhereIn();

输出的SQL语句:
school_name IN ('a','b','c')

1.选择学校(字段为school_name)不在"a",“b”,"c"的数据?

String sql = WhereIn.getInstance(false)
            .setFieldName("school_name")
            .addInValue("a")
            .addInValue("b")
            .addInValue("c")
            .createSQLWhereNotIn();

输出的SQL语句:
school_name NOT IN ('a','b','c')

2.5.3 Between语句使用

1.选择age在18~25的数据

String sql = Between.getInstance(true)
            .setFiledName("age")
            .setLeftValue(18)
            .setRightValue(25)
            .createSQL();

输出的SQL语句:
WHERE age BETWEEN 18 AND 25

2.6 Order语句使用

1.第一属性按照年龄,第二属性按照名字进行升序

 String sql = Order.getInstance(true)
            .setFirstOrderFieldName("age")
            .setSecondOrderFieldName("name")
            .setIsDesc(false)
            .createSQL();

输出的SQL语句:
ORDER BY age,name ASC
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章