覺得手動寫SQL語句很煩?不妨試試這個輪子*-*
0.此輪子地址
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