android 由entity创建创建表的sql语句

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;
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FocusOneThread

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值