import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;

/**
* @author
* @date
*/
public class TableBuilder {
public static final String PRIMARY_KEY = "_id";
private static final Map<Class<?>, String> TYPES = new HashMap<Class<?>, String>();
static {
TYPES.put(byte.class, "INTEGER");
TYPES.put(boolean.class, "INTEGER");
TYPES.put(short.class, "INTEGER");
TYPES.put(int.class, "INTEGER");
TYPES.put(long.class, "INTEGER");
TYPES.put(String.class, "TEXT");
TYPES.put(byte[].class, "BLOB");
TYPES.put(float.class, "REAL");
TYPES.put(double.class, "REAL");
}

public static String createSQLStatement(Entity entity) {
StringBuilder sb = new StringBuilder("CREATE TABLE IF NOT EXISTS ");
sb.append(entity.getTableName());
sb.append(" (" + PRIMARY_KEY + " INTEGER PRIMARY KEY AUTOINCREMENT");
Class cls = entity.getClass();
Field[] f = cls.getDeclaredFields();
for (Field field : f) {
String name = field.getName();
Class c = field.getType();
String type = TYPES.get(c);
if (type != null) {
sb.append(',');
sb.append(name + " " + type);
if (field.isAnnotationPresent(unique.class)) {
sb.append(" UNIQUE");
}
}
}
if (cls.isAnnotationPresent(uniqueConstraints.class)) {
uniqueConstraints constraints = (uniqueConstraints) cls
.getAnnotation(uniqueConstraints.class);
String columnName = constraints.columnNames();
sb.append(",UNIQUE(" + columnName + ")");
String clause = constraints.clause().toString();
sb.append(" ON CONFLICT " + clause);
}
sb.append(')');
return sb.toString();
}

public static String dropSQLStatement(String tableName) {
return "DROP TABLE IF EXISTS " + tableName;
}
}

更多相关文章

  1. 代码中设置drawableleft
  2. android 3.0 隐藏 系统标题栏
  3. Android开发中activity切换动画的实现
  4. Android(安卓)学习 笔记_05. 文件下载
  5. Android中直播视频技术探究之—摄像头Camera视频源数据采集解析
  6. 技术博客汇总
  7. android 2.3 wifi (一)
  8. AndRoid Notification的清空和修改
  9. Android中的Chronometer

随机推荐

  1. Android(安卓)自定义TextView去除padding
  2. (Android)搭建NDK开发环境 (二)
  3. Android命令行获取WiFi列表以及参数
  4. Appium学习第一个测试脚本
  5. Activity去除标题栏和状态栏
  6. Activity 与 ActivityManagerService 的
  7. Android(安卓)属性总结
  8. 最简单的android底部导航栏 + Fragment的
  9. Android三种动画详解
  10. android ListView中添加ImageButton按钮