2012-03-16 6 views
2

私は3つのテーブルがあります。Androidのormlite更新行

@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) 
} 

を私は「レヴェル」の表に更新filedsを必要とする、私はオブジェクトなし「ユーザー:{プロファイル:...}を」JSONからの啓示を得ます

私はQueryBuilderを使用する必要があると思いますが、この疑問の短い例を書いてください。

答えて

1

私はカラム名を静的なものにして検索することができます。私はOrmLiteを使用するプロジェクトを書かれている

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 

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

その後、私はアップデートを行うには、このような何かをするだろう。このような何か。多くのSQLの処理を行うクラスへのリンクはここにあります:https://github.com/kopysoft/Chronos/blob/development/ChronosApp/src/com/kopysoft/chronos/content/Chronos.java

+0

提供されたbean値を更新するには? –

1

私が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()); 

} 

申し訳ありません:あなたが必要とする更新の種類に応じて、これは現実的な選択肢かもしれませんjson;)。 - どちらの方法でも、この更新クエリはあなたのudpateの複雑さに応じて、あなたのニーズに合うかもしれません。 Big plus:オブ​​ジェクトをメモリにロードする必要はありません。

+0

テーブルに50列ある場合、どうすればいいですか?どのように乱雑なプロセスを使用せずにすべての50の列の値を更新するには?私に提案してください。 –

+0

@AnandSavjani 50個の列を更新するには、私のアプローチを使うのは良い考えではないと思います。 GeXと同じ前提条件がある場合は、Eithanのアプローチを使用するか、要件に適したものを探してみてください。 – AgentKnopf

+0

:Eithanのアプローチは、私が別のシナリオを試みる理由です。 –

関連する問題