示例#1
0
  /** 获取缓存实体表信息 */
  public EntityTable getEntityTable(Class<?> claxx, boolean needPK) {
    EntityTable table = getEntityTable(claxx.getName());
    if (table == null) {
      table = new EntityTable();
      putEntityTable(claxx.getName(), table);
      table.claxx = claxx;
      table.name = TableUtil.getTableName(claxx);
      table.pmap = new LinkedHashMap<String, Property>();
      List<Field> fields = FieldUtil.getAllDeclaredFields(claxx);
      // Field[] fields = claxx.getDeclaredFields();
      for (Field f : fields) {
        if (FieldUtil.isInvalid(f)) {
          continue;
        }
        Property p = new Property();
        p.field = f;
        // 获取列名,每个属性都有,没有注解默认取属性名
        Column col = f.getAnnotation(Column.class);
        if (col != null) {
          p.column = col.value();
        } else {
          p.column = f.getName();
        }

        // 主键判断
        PrimaryKey key = f.getAnnotation(PrimaryKey.class);
        if (key != null) {
          // 主键不加入属性Map
          table.key = new com.litesuits.orm.db.model.PrimaryKey(p, key.value());
          // 主键为系统分配,必须为Long型
          if (table.key.isAssignedBySystem()) {
            if (table.key.field.getType() != Long.class
                && table.key.field.getType() != long.class) {
              throw new RuntimeException(
                  PrimaryKey.AssignType.AUTO_INCREMENT
                      + "要求主键属性必须是Long型( the primary key should be Long or long...)\n 提示:把你的主键设置为Long或long型");
            }
          }
        } else {
          // ORM handle
          Mapping mapping = f.getAnnotation(Mapping.class);
          if (mapping != null) {
            table.addMapping(new MapProperty(p, mapping.value()));
          } else {
            table.pmap.put(p.column, p);
          }
        }
      }
    }
    if (needPK && table.key == null) {
      throw new RuntimeException(
          "你必须设置主键(you must set the primary key...)\n 提示:在对象的属性上加PrimaryKey注解来设置主键。");
    }
    return table;
  }
示例#2
0
 /**
  * 检测映射表是否建立,没有则建一张新表。
  *
  * @param db
  * @param tableName
  * @param column1
  * @param column2
  * @return
  */
 public void checkOrCreateMappingTable(
     SQLiteDatabase db, String tableName, String column1, String column2) {
   // 关键点1:初始化全部数据库表
   initAllTablesFromSQLite(db);
   EntityTable table = TableUtil.getMappingTable(tableName, column1, column2);
   synchronized (table) {
     // 关键点2:判断表是否存在,是否需要新加列。
     if (!checkExistAndColumns(db, table)) {
       // 关键点3:新建表并加入表队列
       if (createTable(db, table)) {
         putSqlTableIntoList(table);
       }
     }
   }
 }
示例#3
0
 /**
  * 检测表是否建立,没有则建一张新表。
  *
  * @param db
  * @param entity
  */
 public EntityTable checkOrCreateTable(SQLiteDatabase db, Object entity) {
   // 关键点1:初始化全部数据库表
   initAllTablesFromSQLite(db);
   EntityTable table = TableUtil.getTable(entity);
   // table lock synchronized
   synchronized (table) {
     // 关键点2:判断表是否存在,是否需要新加列。
     if (!checkExistAndColumns(db, table)) {
       // 关键点3:新建表并加入表队列
       if (createTable(db, table)) {
         putSqlTableIntoList(table);
       }
     }
   }
   return table;
 }
示例#4
0
 /**
  * global lock synchronized
  *
  * @param db
  */
 private void initAllTablesFromSQLite(SQLiteDatabase db) {
   synchronized (instance) {
     if (Checker.isEmpty(mSqlTableList)) mSqlTableList = TableUtil.getAllTablesFromSQLite(db);
   }
 }