2012-08-08 2 views
1

일부 필드에는 ORMLite 데이터베이스가 있습니다. 테이블에서 id를 선택하고 싶습니다. id는 id입니다. id는 웹 서비스에서 가져옵니다. 나는 그것을 좋아한다 :ORMLite 술어를 사용하여 일부 열을 선택하십시오.

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

그러나 나는 같은 결과를 얻었다. 데이터베이스에서 데이터를 어떻게 얻어야합니까?

+0

결과는 무엇입니까? 예외? 그렇다면 예외가있는 게시물을 수정하십시오. – Gray

답변

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(); 
} 

희망을.

+0

정말 고마워 !!!! 그건 완벽하게 작동합니다! –

+1

좋습니다! 수락 된 것으로 표시 하시겠습니까? – Zadec

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 
관련 문제