package com.base.db; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; import android.text.TextUtils; import android.util.Log; import com.base.bean.BaseBean; /** * @author Administrator */ public class TableUtil { public static String getTableName(Class<? extends BaseBean<?>> c) { String name = null; Table tableNameAnnotation = c.getAnnotation(Table.class); if (tableNameAnnotation != null) { name = tableNameAnnotation.name(); } if (TextUtils.isEmpty(name)) { name = c.getSimpleName(); } return name; } /** * 拼装sql用的建表语句以及索引语句 * * @param c * @return */ public final static List<String> getCreateStatments(Class<? extends BaseBean<?>> c) { final List<String> createStatments = new ArrayList<String>(); final List<String> indexStatments = new ArrayList<String>(); final StringBuilder builder = new StringBuilder(); final String tableName = getTableName(c); builder.append("CREATE TABLE "); builder.append(tableName); builder.append(" ("); int columnNum = 0; for (final Field f : c.getFields()) { f.setAccessible(true); final TableColumn tableColumnAnnotation = f.getAnnotation(TableColumn.class); if (tableColumnAnnotation != null) { columnNum++; String columnName = f.getName(); builder.append(columnName); builder.append(" "); if (tableColumnAnnotation.type() == TableColumn.Types.INTEGER) { builder.append(" INTEGER"); } else if (tableColumnAnnotation.type() == TableColumn.Types.BLOB) { builder.append(" BLOB"); } else if (tableColumnAnnotation.type() == TableColumn.Types.TEXT) { builder.append(" TEXT"); } else { builder.append(" DATETIME"); } if (tableColumnAnnotation.isPrimary()) { builder.append(" PRIMARY KEY"); } else { if (tableColumnAnnotation.isNotNull()) { builder.append(" NOT NULL"); } if (tableColumnAnnotation.isUnique()) { builder.append(" UNIQUE"); } } if (tableColumnAnnotation.isIndex()) { indexStatments.add("CREATE INDEX idx_" + columnName + "_" + tableName + " ON " + tableName + "(" + columnName + ");"); } builder.append(", "); } } builder.setLength(builder.length() - 2); // remove last ',' builder.append(");"); Log.i("liaowenxin","sql:"+builder.toString()); if (columnNum > 0) { createStatments.add(builder.toString()); createStatments.addAll(indexStatments); } return createStatments; } }