序列化对象中的Android ormlite更新行

序列化对象中的Android ormlite更新行,android,ormlite,Android,Ormlite,我有三张桌子: @DatabaseTable(tableName="user") public class TableUser implements Serializable{ @DatabaseField(dataType = DataType.SERIALIZABLE) private LinkedList<TableProfile> profiles; } @DatabaseTable(tableName="profile") public class Tab

我有三张桌子:

@DatabaseTable(tableName="user")
public class TableUser  implements Serializable{

  @DatabaseField(dataType = DataType.SERIALIZABLE)
    private LinkedList<TableProfile> profiles;
}

@DatabaseTable(tableName="profile")
public class TableProfile implements Serializable{

   @DatabaseField(dataType = DataType.SERIALIZABLE)
    private LinkedList<TableRevel> revelations;
}

@DatabaseTable(tableName="revel")
public class TableRevel implements Serializable{
    private String our_profile_id;
    @DatabaseField(canBeNull=false)
    private String other_profile_id;
    @DatabaseField(canBeNull=false)
    private String info;
    @DatabaseField(canBeNull=false)
}
@DatabaseTable(tableName=“user”)
公共类TableUser实现了可序列化{
@DatabaseField(dataType=dataType.SERIALIZABLE)
私有链接列表配置文件;
}
@数据库表(tableName=“profile”)
公共类TableProfile实现了可序列化{
@DatabaseField(dataType=dataType.SERIALIZABLE)
私人关系网站披露;
}
@数据库表(tableName=“revel”)
公共类TableRevel实现了可序列化{
私有字符串我们的_profile_id;
@数据库字段(canBeNull=false)
私有字符串其他配置文件id;
@数据库字段(canBeNull=false)
私有字符串信息;
@数据库字段(canBeNull=false)
}
我需要更新“revel”表中的文件,我从Json中获得启示,而不需要对象“user:{profile:…}”


我想我需要使用QueryBuilder,如果这个查询可以通过,请写一个简短的例子。

我会强制列名是静态的,这样你就可以在上面搜索。大概是这样的:

@DatabaseTable(tableName="revel")
public class TableRevel implements Serializable{
  public static final String PROFILE_ID = 'id';
  @DatabaseField(canBeNull=false, columnName = PROFILE_ID)
  private String our_profile_id;
  @DatabaseField(canBeNull=false)
  private String other_profile_id;
  @DatabaseField(canBeNull=false)
  private String info;
}
然后我会这样做来进行更新:

public class foo extends OrmLiteSqliteOpenHelper {
...

public updateField(String jsonString) throws SQLException{
  Dao<TableRevel, String> revelDAO = getDao(TableRevel.class);
  QueryBuilder<TableRevel, String> queryBuilder = revelDAO.queryBuilder();
  queryBuilder.where().eq(TableRevel.PROFILE_ID, getIdFromJson(jsonString) );
  PreparedQuery<TableRevel> preparedQuery = queryBuilder.prepare();
  TableRevel revelEntry = revelDAO.queryForFirst();

  //update the entry here
  ...

  revelDAO.update(revelEntry); //update the data
public类foo扩展了OrmLiteSqliteOpenHelper{
...
公共updateField(字符串jsonString)引发SQLException{
Dao revelDAO=getDao(TableRevel.class);
QueryBuilder QueryBuilder=revelDAO.QueryBuilder();
queryBuilder.where().eq(TableRevel.PROFILE_ID,getIdFromJson(jsonString));
PreparedQuery PreparedQuery=queryBuilder.prepare();
TableRevel revelEntry=revelDAO.queryForFirst();
//在此更新条目
...
revelDAO.update(revelEntry);//更新数据
我已经编写了一个使用OrmLite的项目。链接到执行大量sql操作的类,如下所示:


希望这有帮助!

据我所知,Ethan的回答是将TableRevel对象加载到内存中以进行更新。根据您需要的更新类型,这可能是一种可行的替代方法:

public update(String jsonString) throws SQLException{

  Dao<TableRevel, String> dao= getDao(TableRevel.class);
  UpdateBuilder<TableRevel, String> updateBuilder = dao.updateBuilder();
  //Update the columns you want to update for the given jsonString-match
  updateBuilder.updateColumnValue(TableRevel.My_FIELD, newValue);
  // ...where the json string matches
  updateBuilder.where().eq(TableRevel.PROFILE_ID, getIdFromJson(jsonString));
  //Execute the update
  dao.update(updateBuilder.prepare());

}
公共更新(字符串jsonString)引发SQLException{
Dao-Dao=getDao(TableRevel.class);
UpdateBuilder UpdateBuilder=dao.UpdateBuilder();
//为给定的jsonString匹配更新要更新的列
updateBuilder.updateColumnValue(TableRevel.My_字段,newValue);
//…json字符串匹配的位置
updateBuilder.where().eq(TableRevel.PROFILE_ID,getIdFromJson(jsonString));
//执行更新
update(updateBuilder.prepare());
}

很抱歉,如果我误解了你的问题,但是你提供的信息有点稀疏,我这一次对json的内部结构一无所知;)-无论哪种方式,这个更新查询都可能适合你的需要,这取决于你的udpate有多复杂。大加号:不需要将对象加载到内存中。

如果表中有50列,我该怎么做?如何o在不使用混乱过程的情况下更新所有50列值?请建议我。@AnandSavjani更新50列,我认为使用我的方法不是一个好主意。如果您具有与GeX相同的先决条件,请使用Eithan的方法或尝试找到更适合您要求的方法。:Eithan的方法不适用于我的sc这就是为什么我要尝试另一个场景。