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 GIF播放的问题
  2. android多apk共享私有文件
  3. Android(安卓)数据库sqlite
  4. android AsyncTask详解
  5. Android(安卓)实战 (一) Remote Service,Thr
  6. Android中Bitmap,byte[],Drawable相互转
  7. android init.rc中的service
  8. Android应用程序编译过程简述
  9. 使用AIDL(Android接口描述语言)设计和使
  10. Android DNS之DNS参数设置