Ejemplo n.º 1
0
 /**
  * 将Sql Table放入存储集合
  *
  * @param table
  */
 private void putNewSqlTableIntoMap(EntityTable table) {
   if (Log.isPrint) {
     Log.i(TAG, "Table [" + table.name + "] Create Success");
   }
   SQLiteTable sqlTable = new SQLiteTable();
   sqlTable.name = table.name;
   sqlTable.columns = new HashMap<String, Integer>();
   if (table.key != null) {
     sqlTable.columns.put(table.key.column, 1);
   }
   if (table.pmap != null) {
     for (String col : table.pmap.keySet()) {
       sqlTable.columns.put(col, 1);
     }
   }
   // 第一次建表,不用检查
   sqlTable.isTableChecked = true;
   mSqlTableMap.put(sqlTable.name, sqlTable);
 }
Ejemplo n.º 2
0
  public static String getColumns(final SQLiteTable table) {
    final Class<?> klass = table.getClass();

    final StringBuilder builder = new StringBuilder();
    final ConcatMap uniqueMap = new ConcatMap(",");

    try {
      getColumns(klass, builder, uniqueMap);
    } catch (final Exception e) {
      Logger.ex(e);
    }

    builder.append(getUnique(uniqueMap));

    if (builder.length() > 0) {
      builder.deleteCharAt(builder.length() - 1);
    }

    return builder.toString();
  }
Ejemplo n.º 3
0
 /**
  * 检查表是否存在,存在的话检查是否需要改动,添加列字段。 注:sqlite仅仅支持表改名、表添加列两种alter方式。表中修改、刪除列是不被直接支持的。 不能新加主键:The column
  * may not have a PRIMARY KEY or UNIQUE constraint.
  *
  * <p>http://www.sqlite.org/lang_altertable.html
  */
 private boolean checkExistAndColumns(SQLiteDatabase db, EntityTable entityTable) {
   if (!Checker.isEmpty(mSqlTableMap)) {
     SQLiteTable sqlTable = mSqlTableMap.get(entityTable.name);
     if (sqlTable != null) {
       if (Log.isPrint) {
         Log.d(TAG, "Table [" + entityTable.name + "] Exist");
       }
       if (!sqlTable.isTableChecked) {
         // 表仅进行一次检查,检验是否有新字段加入。
         sqlTable.isTableChecked = true;
         if (Log.isPrint) {
           Log.i(TAG, "Table [" + entityTable.name + "] check column now.");
         }
         if (entityTable.key != null) {
           if (sqlTable.columns.get(entityTable.key.column) == null) {
             SQLStatement stmt = SQLBuilder.buildDropTable(sqlTable.name);
             stmt.execute(db);
             if (Log.isPrint) {
               Log.i(
                   TAG,
                   "Table ["
                       + entityTable.name
                       + "] Primary Key has changed, "
                       + "so drop and recreate it later.");
             }
             return false;
           }
         }
         if (entityTable.pmap != null) {
           ArrayList<String> newColumns = new ArrayList<String>();
           for (String col : entityTable.pmap.keySet()) {
             if (sqlTable.columns.get(col) == null) {
               newColumns.add(col);
             }
           }
           if (!Checker.isEmpty(newColumns)) {
             for (String col : newColumns) {
               sqlTable.columns.put(col, 1);
             }
             int sum = insertNewColunms(db, entityTable.name, newColumns);
             if (Log.isPrint) {
               if (sum > 0) {
                 Log.i(
                     TAG,
                     "Table ["
                         + entityTable.name
                         + "] add "
                         + sum
                         + " new column : "
                         + newColumns);
               } else {
                 Log.e(
                     TAG,
                     "Table ["
                         + entityTable.name
                         + "] add "
                         + sum
                         + " new column error : "
                         + newColumns);
               }
             }
           }
         }
       }
       return true;
     }
   }
   if (Log.isPrint) {
     Log.d(TAG, "Table [" + entityTable.name + "] Not Exist");
   }
   return false;
 }