package com.wisedu.scc.love.sqlite;
import android.content.ContentValues;
import android.database.Cursor;
import android.util.Property;
import com.wisedu.scc.love.utils.CommonUtil;
import com.wisedu.scc.love.utils.ReflectBeanUtil;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* Created by JZ on 2015/3/11.
*/
public class SqlBuilder {
public static String PACKAGE = "com.wisedu.scc.love.sqlite.model.";
public static String[] TABLES = new String[]{
"User", "ChatRecord", "Login"
};
/**
* 创建所有表语句
* @return
*/
public static List<String> allCreateSql(){
List<String> result = new ArrayList<>();
// TODO 遍历model文件夹下的所有类名
String[] tables = TABLES;
for(String table : tables){
result.add(geneSql(table));
}
return result;
}
/**
* 组装SQL语句
* @return
*/
public static String geneSql(String table){
// 取得Bean的字段
Map<String, Field> fields = ReflectBeanUtil.getFields(geneClassName(table));
// 组装创建表语句
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("CREATE TABLE ");
stringBuffer.append(table);
stringBuffer.append(" (");
Set<String> keys = fields.keySet();
for (String key : keys){
stringBuffer.append(key);
stringBuffer.append(" not null,");
}
String result = CommonUtil.cutLastChar(stringBuffer.toString())+");";
return result;
}
/**
* 组装ContentValues
* @param table
* @return
*/
public static ContentValues geneValues(String table, Object obj){
ContentValues values = new ContentValues();
Map<String, Field> fields = ReflectBeanUtil.getFields(geneClassName(table));
for(String key : fields.keySet()){
Object value = ReflectBeanUtil.getFieldValueByName(obj, key);
if(null != value)
values.put(key, value.toString());
}
return values;
}
/**
* 组装条件语句
* @param operator
* @param strings
* @return
*/
public static String geneWhere(String operator, String... strings){
StringBuffer stringBuffer = new StringBuffer();
for (String str : strings){
stringBuffer.append(str);
stringBuffer.append(" ");
stringBuffer.append(operator);
stringBuffer.append(" ? and ");
}
stringBuffer.append(" 1=1 ");
return stringBuffer.toString();
}
/**
* 组装条件语句
* @param table
* @return
*/
public static String geneClassName(String table){
return PACKAGE.concat(table);
}
/**
* 将游标转换为业务实体
* @param cursor
* @param table
* @return
*/
public static <T> T cursor2Entity(Cursor cursor, String table){
try {
if(cursor!=null ){
Class<?> clazz = ReflectBeanUtil.getClazzByBeanName(geneClassName(table));
T entity = (T) clazz.newInstance();
Map<String, Field> fields = ReflectBeanUtil.getFields(geneClassName(table));
int columnCount = cursor.getColumnCount();
if(columnCount>0){
for(int i=0;i<columnCount;i++){
String column = cursor.getColumnName(i);
String value = cursor.getString(i);
Field field = fields.get(column);
Property property = Property.of(clazz, field.getType(), column);
property.set(entity, value);
}
return entity;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}