基於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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章