1

いくつかのフィールドを持つORMLiteデータベースがあります。Web サービスから取得した id == id のテーブルからタイトルを選択したいと考えています。私はそれが好きです:

 try {
    Dao<ProcessStatus,Integer> dao = db.getStatusDao(); 
    Log.i("status",dao.queryForAll().toString());
    QueryBuilder<ProcessStatus,Integer> query = dao.queryBuilder();
    Where where = query.where();
    String a = null;
    for(Order r:LoginActivity.orders) {
        //LoginActivity.orders - array of my objects which I get from webservice
        Log.i("database",query.selectRaw("select title from process_status").
            where().rawComparison(ProcessStatus.STATUS_ID, "=",
                       r.getProcess_status().getProccessStatusId()).toString());
    }
    Log.i("sr",a);
} catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

私はこのように試しましたが、タイトルではなく、IDのセットしか取得しません。私はこのように試しました:

Log.i("database", query.selectColumns(ProcessStatus.STATUS_TITLE).where().
    eq(ProcessStatus.STATUS_ID, r.getProcess_status().getProccessStatusId())
    .toString());

しかし、私は同じ結果を持っています。データベースからデータを取得するにはどうすればよいですか?

4

2 に答える 2

14

テーブルから特定のフィールドを選択するには、次のようにします。

String result = "";
try {
    GenericRawResults<String[]> rawResults = yourDAO.queryRaw("select " +
        ProcessStatus.STATUS_TITLE +" from YourTable where "+ 
        ProcessStatus.STATUS_ID + " = " + 
        r.getProcess_status().getProccessStatusId());
    List<String[]> results = rawResults.getResults();
    // This will select the first result (the first and maybe only row returned)
    String[] resultArray = results.get(0);
    //This will select the first field in the result which should be the ID
    result = resultArray[0];
} catch (Exception e) {
    e.printStackTrace();
}

お役に立てれば。

于 2012-08-08T15:21:57.743 に答える
6

processStatusIdフィールドのすべてのクラスやその他のクラスを見ないと、この質問に適切に答えることは困難です。ただし、生のメソッドを使いすぎていると思います。値などを適切にエスケープしていない可能性があります。

INループ内で行っていることの代わりに、SQL ステートメントを使用することをお勧めします。何かのようなもの:

List<String> ids = new ArrayList<String>();
for(Order r : LoginActivity.orders) {
    ids.add(r.getProcess_status().getProccessStatusId());
}
QueryBuilder<ProcessStatus, Integer> qb = dao.queryBuilder();
Where where = qb.where();
where.in(ProcessStatus.STATUS_ID, ids);
qb.selectColumns(ProcessStatus.STATUS_TITLE);

クエリを作成したので、ProcessStatusオブジェクトを取得するか、次を使用してタイトル自体を取得できdao.queryForRaw(...)ます。

List<ProcessStatus> results = qb.query();
// or use the prepareStatementString method to get raw results
GenericRawResults<String[]> results = dao.queryRaw(qb.prepareStatementString());
// each raw result would have a String[] with 1 element for the title
于 2012-08-08T16:17:07.433 に答える