Skip to content

Commit

Permalink
加入DhcSqlFieldName注解,可以对映射的字段名字进行注解的方式定义,更加方便
Browse files Browse the repository at this point in the history
  • Loading branch information
陈浪 committed May 24, 2020
1 parent 0e47105 commit 28bb54b
Show file tree
Hide file tree
Showing 6 changed files with 250 additions and 17 deletions.
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -291,4 +291,6 @@
'}';
}
}

# 要想查看完整用法,请查阅app Module 下的 MainActivity(感谢使用)
207 changes: 204 additions & 3 deletions app/src/main/java/com/ellen/dhcsqlite/MainActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,28 +3,202 @@
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

import com.ellen.dhcsqlitelibrary.table.reflection.ZxyReflectionTable;
import com.ellen.sqlitecreate.createsql.create.createtable.SQLField;
import com.ellen.sqlitecreate.createsql.delete.DeleteTableDataRow;
import com.ellen.sqlitecreate.createsql.helper.WhereSymbolEnum;
import com.ellen.sqlitecreate.createsql.order.Order;
import com.ellen.sqlitecreate.createsql.update.UpdateTableDataRow;
import com.ellen.sqlitecreate.createsql.where.Where;
import com.ellen.sqlitecreate.createsql.where.WhereIn;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

private TextView tvAll;
private StudentTable studentTable;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvAll = findViewById(R.id.tv_all);
SQliteLibrary sQliteLibrary = new SQliteLibrary(this,"sqlite_library",1);
StudentTable studentTable = new StudentTable(sQliteLibrary.getWriteDataBase(),Student.class);
SQliteLibrary sQliteLibrary = new SQliteLibrary(this, "sqlite_library", 1);
studentTable = new StudentTable(sQliteLibrary.getWriteDataBase(), Student.class);

//创建表
onCreateTable();

//增加数据
addData();
//删除数据
deleteData();
//修改数据
updateData();
//查询数据
searchData();
//其他用法
other();
}

private void other() {

//是否包含该条数据 & 根据主键来判断
//注意这种方式换成search方式完成,并不一定使用该方法,当然这只是笔者提供的一个方法而已
Student student = new Student(-1, "Ellen2018", 19, "18272167574", "火星");
Father father = new Father("Ellen2019", "1");
student.setFather(father);
boolean isContains = studentTable.isContainsByPrimaryKey(student);
if(isContains){
//存在该数据
}else {
//不存在该数据
}

//获取表名字
String tableName = studentTable.getTableName();

//修改表名
studentTable.reNameTable("my_student", new ZxyReflectionTable.OnRenameTableCallbcak() {
@Override
public void onRenameFailure(String errMessage, String currentName, String newName, String reNameTableSQL) {
//修改失败回调这里
}

@Override
public void onRenameSuccess(String oldName, String newName, String reNameTableSQL) {
//修改成功回调这里
}
});

//删除表
studentTable.deleteTable();

//删除表 & 带回调
studentTable.deleteTable(new ZxyReflectionTable.OnDeleteTableCallback() {
@Override
public void onDeleteTableFailure(String errMessage, String deleteTableSQL) {
//删除失败回调这里
}

@Override
public void onDeleteTableSuccess(String deleteTableSQL) {
//删除成功回调这里
}
});

//删除其他表
studentTable.deleteTable("father");
studentTable.deleteTable("father", new ZxyReflectionTable.OnDeleteTableCallback() {
@Override
public void onDeleteTableFailure(String errMessage, String deleteTableSQL) {

}

@Override
public void onDeleteTableSuccess(String deleteTableSQL) {

}
});

}

private void searchData() {
//查询my_name字段中含有"Ellen"的数据,然后根据age进行排序(Desc方式)
String whereSql =
Where.getInstance(false)
.addAndWhereValue("my_name", WhereSymbolEnum.LIKE, "%Ellen%")
.createSQL();
String orderSql = Order.getInstance(false)
.setFirstOrderFieldName("age")
.setIsDesc(true)
.createSQL();

List<Student> studentList = studentTable.search(whereSql, orderSql);

//查询表中所有数据,没有排列顺序
List<Student> studentList1 = studentTable.getAllData(null);
//查询表中所有数据,根据age进行排序(Desc方式)
List<Student> studentList2 = studentTable.getAllData(orderSql);
}

private void updateData() {
//根据主键进行修改
//注意如果你的bean类没有声明主键,那么调用此方法就会抛 NoPrimaryKeyException
Student student = new Student(-1, "Ellen2018", 19, "18272167574", "火星");
Father father = new Father("Ellen2019", "1");
student.setFather(father);
studentTable.updateByPrimaryKey(student);

String whereSql =
Where.getInstance(false)
.addAndWhereValue("my_name", WhereSymbolEnum.EQUAL, "Ellen2018")
.addAndWhereValue("age", WhereSymbolEnum.MORE_THAN, 20)
.createSQL();
//注意这种修改方式为全映射修改,如果只修改部分数据,请使用下面的方式
//什么是全映射修改?就是将对象的整个属性数据覆盖在whereSql满足的条件里
studentTable.update(student, whereSql);


//自定义updateSql进行修改数据
//将大于age > 20岁年龄的数据的 age 的值全部修改为 age = 18,my_name = "永远18岁"
String whereSqlByAge =
Where.getInstance(false)
.addAndWhereValue("age", WhereSymbolEnum.MORE_THAN, 20)
.createSQL();

String updateSql = UpdateTableDataRow.getInstance()
.setTableName(studentTable.getTableName())
.addSetValue("age", 18)
.addSetValue("my_name", "永远18岁")
.createSQLAutoWhere(whereSqlByAge);

studentTable.exeSQL(updateSql);

List<Student> studentList = new ArrayList<>();
for (int i = 0; i < 100; i++) {
student = new Student(i, "Ellen2018", 19, "18272167574", "火星");
studentList.add(student);
}
//save or update 根据主键判断,根据主键查询没有该数据就存储,有就进行更新
studentTable.saveOrUpdateByPrimaryKey(student);
studentTable.saveOrUpdateByPrimaryKey(studentList);

}

private void deleteData() {
//先构建Where SQL语句

//删除my_name为Ellen2018 且age > 20 的数据
String whereSql =
Where.getInstance(false)
.addAndWhereValue("my_name", WhereSymbolEnum.EQUAL, "Ellen2018")
.addAndWhereValue("age", WhereSymbolEnum.MORE_THAN, 20)
.createSQL();

studentTable.delete(whereSql);

//也可以自己完全构造出删除的SQL语句进行删除
String deleteSql =
DeleteTableDataRow.getInstance()
.setTableName(studentTable.getTableName())
.createSQLAutoWhere(whereSql);
studentTable.exeSQL(deleteSql);

//清空数据
studentTable.clear();

}

/**
* 创建表
*/
private void onCreateTable() {

//创建表带回调
studentTable.onCreateTableIfNotExits(new ZxyReflectionTable.OnCreateSQLiteCallback() {
Expand All @@ -40,9 +214,36 @@ public void onCreateTableFailure(String errMessage, String tableName, List<SQLFi

@Override
public void onCreateTableSuccess(String tableName, List<SQLField> sqlFieldList, String createSQL) {
BaseLog.log("创建表",createSQL);
BaseLog.log("创建表", createSQL);
tvAll.setText(createSQL);
}
});

//创建表不带回调-->建议使用这种
studentTable.onCreateTableIfNotExits();

//不建议使用这种
//studentTable.onCreateTable();
}

private void addData() {
Student student = new Student(-1, "Ellen2018", 19, "18272167574", "火星");
Father father = new Father("Ellen2019", "1");
student.setFather(father);

//单条数据添加
studentTable.saveData(student);

//多条数据添加
List<Student> studentList = new ArrayList<>();
for (int i = 0; i < 100; i++) {
student = new Student(i, "Ellen2018", 19, "18272167574", "火星");
studentList.add(student);
}
studentTable.saveData(studentList);

//存储数据之前清空数据
//studentTable.saveDataAndDeleteAgo(studentList);
//studentTable.saveDataAndDeleteAgo(student);
}
}
3 changes: 2 additions & 1 deletion app/src/main/java/com/ellen/dhcsqlite/Student.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@ public class Student {
private boolean isMan;
private Father father;

public Student(String name, int age, String phoneNumber, String address) {
public Student(int id,String name, int age, String phoneNumber, String address) {
this.id = id;
this.name = name;
this.age = age;
this.phoneNumber = phoneNumber;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public void exeSQL(String sql){
getSQLiteDatabase().execSQL(sql);
}

public Cursor serachBySQL(String sql){
public Cursor searchBySQL(String sql){
return getSQLiteDatabase().rawQuery(sql,null);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package com.ellen.dhcsqlitelibrary.table.exception;

public class NoPrimaryKeyExcepition extends RuntimeException {
public class NoPrimaryKeyException extends RuntimeException {

private String errorMessage;

public NoPrimaryKeyExcepition(String errorMessage){
public NoPrimaryKeyException(String errorMessage){
this.errorMessage = errorMessage;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import android.database.sqlite.SQLiteDatabase;

import com.ellen.dhcsqlitelibrary.table.ZxyTable;
import com.ellen.dhcsqlitelibrary.table.exception.NoPrimaryKeyExcepition;
import com.ellen.dhcsqlitelibrary.table.exception.NoPrimaryKeyException;
import com.ellen.sqlitecreate.createsql.add.AddManyRowToTable;
import com.ellen.sqlitecreate.createsql.add.AddSingleRowToTable;
import com.ellen.sqlitecreate.createsql.create.createtable.SQLField;
Expand Down Expand Up @@ -198,11 +198,27 @@ public void reNameTable(String newName, OnRenameTableCallbcak onRenameTableCallb
}
}

public void deleteTable(){
deleteTable(tableName);
}

public void deleteTable(OnDeleteTableCallback onDeleteTableCallback){
deleteTable(tableName,onDeleteTableCallback);
}

/**
* 删除表 by 表名字
* @param tableName
*/
public void deleteTable(String tableName) {
String deleteTableSQL = getDeleteTable().setTableName(tableName).createSQL();
exeSQL(deleteTableSQL);
}

/**
* 删除表 by 表名字 & 带回调
* @param tableName
*/
public void deleteTable(String tableName, OnDeleteTableCallback onDeleteTableCallback) {
boolean isException = false;
String deleteTableSQL = getDeleteTable().setTableName(tableName).createSQL();
Expand Down Expand Up @@ -305,6 +321,19 @@ public void saveDataAndDeleteAgo(List<T> dataList) {
saveData(dataList);
}

/**
* 存储之前先清空表的所有数据
*
* @param
*/
public void saveDataAndDeleteAgo(T data) {
if (data == null) {
return;
}
clear();
saveData(data);
}

/**
* 删除
* 建议使用Where系列类生产Where SQL语句
Expand Down Expand Up @@ -364,7 +393,7 @@ public void saveOrUpdateByPrimaryKey(List<T> tList){
public void updateByPrimaryKey(T t){
if(primarykeySqlField == null){
//说明没有主键,抛出无主键异常
throw new NoPrimaryKeyExcepition("没有主键,无法根据主键更新数据!");
throw new NoPrimaryKeyException("没有主键,无法根据主键更新数据!");
}else {
String whereSql = Where.getInstance(false)
.addAndWhereValue(primarykeySqlField.getName(), WhereSymbolEnum.EQUAL,reflactionHelper.getValue(t,primarykeyField))
Expand All @@ -382,12 +411,12 @@ public boolean isContainsByPrimaryKey(T t){
boolean isContains = false;
if(primarykeySqlField == null){
//说明没有主键,抛出无主键异常
throw new NoPrimaryKeyExcepition("没有主键,无法根据主键查询数据的存在!");
throw new NoPrimaryKeyException("没有主键,无法根据主键查询数据的存在!");
}else {
String whereSql = Where.getInstance(false)
.addAndWhereValue(primarykeySqlField.getName(), WhereSymbolEnum.EQUAL,reflactionHelper.getValue(t,primarykeyField))
.createSQL();
List<T> tList = serach(whereSql,null);
List<T> tList = search(whereSql,null);
if(tList != null && tList.size() > 0){
isContains = true;
}else {
Expand Down Expand Up @@ -435,14 +464,14 @@ public void update(T t, String whereSQL) {
* @param orderSQL
* @return
*/
public List<T> getAllDatas(String orderSQL) {
public List<T> getAllData(String orderSQL) {
SerachTableData serachTableData = getSerachTableData().setTableName(tableName);
serachTableData.setIsAddField(false);
String getAllTableDataSQL = serachTableData.getTableAllDataSQL(orderSQL);
return serachDatasBySQL(getAllTableDataSQL);
return searchDataBySql(getAllTableDataSQL);
}

public List<T> serach(String whereSQL, String orderSQL) {
public List<T> search(String whereSQL, String orderSQL) {
List<T> dataList = new ArrayList<>();
SerachTableData serachTableData = getSerachTableData().setTableName(tableName);
serachTableData.setIsAddField(false);
Expand All @@ -452,12 +481,12 @@ public List<T> serach(String whereSQL, String orderSQL) {
} else {
serachSQL = serachTableData.createSQLAutoWhere(whereSQL);
}
return serachDatasBySQL(serachSQL);
return searchDataBySql(serachSQL);
}

private List<T> serachDatasBySQL(String sql) {
private List<T> searchDataBySql(String sql) {
List<T> dataList = new ArrayList<>();
Cursor cursor = serachBySQL(sql);
Cursor cursor = searchBySQL(sql);
while (cursor.moveToNext()) {
T t = null;
try {
Expand Down

0 comments on commit 28bb54b

Please sign in to comment.