2011-12-13 2 views
0

SQLite 쿼리의 출력을 KEY_DATE와 KEY_ROWID + KEY_TYPE의 두 부분으로 조작하려고합니다. 여기에 KEY_TYPE 비트가없는 코드입니다 :안드로이드 문자열에서 데이터베이스 출력 조작

DataBaseAdapter db = new DataBaseAdapter(this); 
    db.open(); 
    // get last test date 
    int whichItem = 1; 
    int upDown = 1; // use 1 for descending ordering 
    Cursor mCursor = db.getLogType(whichItem, upDown); 
    String[] columns = new String[] {DataBaseAdapter.KEY_DATE, DataBaseAdapter.KEY_ROWID}; 
    startManagingCursor(mCursor); 
    ListAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.simple_expandable_list_item_2, mCursor, columns, new int[] {android.R.id.text1, android.R.id.text2}){ 
     public boolean areAllItemsEnabled(){ 
      return false; 
     } 
     public boolean isEnabled(int position){ 
      return false; 
     } 
    }; 
    setListAdapter(adapter); 
    db.close(); 

그것은 잘 작동은하지만 교체 할 때 :와

String[] columns = new String[] {DataBaseAdapter.KEY_DATE, DataBaseAdapter.KEY_ROWID}; 

:

String[] columns = new String[] {DataBaseAdapter.KEY_DATE, DataBaseAdapter.KEY_ROWID + DataBaseAdapter.KEY_TYPE}; 

가 작동하지 않습니다.

모두 감사합니다.

+0

'+'는 당신에게 무엇을 의미합니까? – AlfredoVR

+0

연결하십시오. 문제없이 다른 곳에서 사용했습니다. 'Cursor mCursor = db.query (true, DATABASE_LOGTABLE, 새 문자열 [] {KEY_ROWID, KEY_TYPE, KEY_DATE, KEY_NOTES}, KEY_TYPE + "="+ rowType, null, null, null, null, null); 잘못된? – user114671

+0

Where 절을 만들려고합니까? –

답변

1

좋아, 그래서 나는 더 간단한 대답을 발견했다. 문제는 실제로 연결과 함께했습니다. 내가 String[] columns...에서 해보려했지만 실제로 필요한 것은 SELECT 쿼리의 일부로 연결하여 별칭을 사용하는 것이 었습니다. 그래서 나는 다음과 같이 KEY_ROWID_TYPE 열 별명을 포함하도록 String[] columns을 변경 :

String[] columns = new String[] {DataBaseAdapter.KEY_DATE, DataBaseAdapter.KEY_ROWID_TYPE}; 

을 그리고 쿼리는 다음과 같습니다

Cursor mCursor = db.query(true, DATABASE_LOGTABLE, new String[] {KEY_ROWID, KEY_TYPE, KEY_DATE, KEY_ROWID + " || \"-\" || " + KEY_TYPE + " as " + KEY_ROWID_TYPE}, null, null, null, null, null, null); 

물론 나도 KEY_ROWID_TYPE을 정의했다.

도움을 주신 모든 분들께 감사드립니다.

0

나는 연결을 시도 할 것입니다 그리고 당신이에 뭐

String tempStr = DataBaseAdapter.KEY_ROWID + DataBaseAdapter.KEY_TYPE; 
String[] columns = new String[] {DataBaseAdapter.KEY_DATE,tempStr}; 
+0

감사하지만 이것은 배열을 올바르게 작성하지 못하는 것 같습니다. 명시 적 루핑이 있어야합니까? – user114671

1

배열에 삽입 : 뜻이 몇 가지 새로운 열 이름을 안내하는 당신은 CONCAT 문자열 DataBaseAdapter.KEY_ROWID + DataBaseAdapter.KEY_TYPE 있습니다

String[] columns = new String[] {DataBaseAdapter.KEY_DATE, DataBaseAdapter.KEY_ROWID + DataBaseAdapter.KEY_TYPE} 

둘 다 하이브리드 (예 : KEY_ROWID="_id"KEY_TYPE="device" 인 경우 새 열 이름은 "_iddevice"이됩니다). 결과에 영향을 미칠 수 있습니다. 위에서 언급 한 두 개의 열 이름의 합집합과 같은 이름의 열이 있는지 확인하십시오. 그러나 결과에 KEY_TYPE을 포함 시키려면 열 이름을 보유하는 배열의 개별 요소로 KEY_TYPE을 추가하십시오. 그런 다음 결과 행에서 두 열의 결과를 연결합니다. (나는 이것이 당신이 성취하려는 것을 가정하고있다)

String[] columns = new String[] {DataBaseAdapter.KEY_TYPE, DataBaseAdapter.KEY_ROWID}; 
List<MyResult> list = new ArrayList<MyResult>(); 
Cursor result_of_query = database.query(DataBaseAdapter.TABLE_NAME, columns, null, null, null, null, null); 
      if(result_of_query.moveToFirst()) 
      { 
       while(result_of_query.isAfterLast()==false) 
       { 
        MyResult result = new MyResult(); 
result.setId(result_of_query.getInt(result_of_query.getColumnIndex(DataBaseAdapter.KEY_ROWID)))); 
       result.setType(result_of_query.getString(result_of_query.getColumnIndex(DataBaseAdapter.KEY_TYPE)))); 

        result_of_query.moveToNext(); 
        list.add(result); 

       } 
      } 

      result_of_query.close(); 


--- 

public class MyResult 
{ 
    private String type; 
    private int id; 
    public void setType(String t) 
    { 
     type=t; 
    } 
    public String getType() 
    { 
     return type; 
    } 

    public void setId(int t) 
    { 
     id=t; 
    } 
    public int getId() 
    { 
     return id; 
    } 
} 

--- 
+0

답변 해 주셔서 감사합니다. 연결을 어떻게해야하는지 예를 들어 주시겠습니까? – user114671

+0

'DataBaseAdapter' 클래스에서 또 다른'static String KEY_ROWID_TYPE = KEY_ROWID + KEY_TYPE;을 선언하고'DataBaseAdapter.KEY_ROWID_TYPE'에 접근하십시오. 그러나 당신이하려는 것은 무엇입니까? 이 주석에서 Where 절을 작성하려고한다는 사실을 알게되었을 수도 있습니다 ... 나는 틀릴 수도 있습니다. 아니면 두 컬럼의 데이터를 연결하려고합니까? 그렇다면. 컬럼 이름 대신 출력 문자열을 concatinate 할 필요가 있습니다. –

+0

안녕하세요 Nikola.간단한 확장 가능 목록에 연결된 데이터를 표시하려고합니다. 나는 두 데이터베이스 필드의 출력을 합칠 수있을 것이라고 생각했다. (당연히 그 사이에 공간을 두 겠지만) 그렇게 쉬운 것은 아니다. – user114671