Android에서 SQLite를 오랫동안 사용해 왔지만 조인 테이블 작업을 처음 수행했습니다. 나는 하루 종일 그것에 종사하고 있기 때문에 나는 그것에 대해 완전히 좌절하고있다.SQLite : 테이블을 조인하고 SimpleCursorAdapter를 사용하여 커서를 표시하는 방법
이제 2 개의 테이블, FTSProfile 및 FTSCell이 있으며 LEFT JOIN과 함께 공통 키 A를 사용하여 결합하려고합니다. 그래서 나는 원하는 것을 수행하기 위해 일련의 코드 인 ContentProvider와 Database를 구현했다. 데이터베이스에서 SQLiteQueryBuilder를 사용하여 쿼리를 작성하고 커서를 가져옵니다. 내가 사용 :
SQLiteQueryBuilder builder = new SQLiteQueryBuilder();
builder.setTables(FTS_VIRTUAL_TABLE_PROFILE+" LEFT JOIN "+FTS_VIRTUAL_TABLE_CELL+" ON "+FTS_VIRTUAL_TABLE_CELL+"."+Database.KEY_CID+"="+FTS_VIRTUAL_TABLE_PROFILE+"."+Database.KEY_CELL_ID);
builder.setProjectionMap(mColumnMap_CombinedTable);
을 내 해시 맵과 같은 것입니다 :
HashMap<String,String> map = new HashMap<String,String>();
for (String key: KEYS_PROFILE) map.put(key, FTS_VIRTUAL_TABLE_PROFILE+"."+key);
for (String key: KEYS_CELL) map.put(key, FTS_VIRTUAL_TABLE_CELL+"."+key);
map.put(BaseColumns._ID, BaseColumns._ID);
map.put(SearchManager.SUGGEST_COLUMN_INTENT_DATA_ID, "rowid AS " + SearchManager.SUGGEST_COLUMN_INTENT_DATA_ID);
map.put(SearchManager.SUGGEST_COLUMN_SHORTCUT_ID, "rowid AS " + SearchManager.SUGGEST_COLUMN_SHORTCUT_ID);
그리고 난이 프로그램을 실행하고 결과를 목록을 열려고하면 다음, 내가 얻을 내가 가진 SQLiteException: no such column: _id...
해결 방법은 없지만 실제로 어떻게 제거 할 수 있는지 알고 싶습니다. 누구든지 도와 줄 수 있습니까?
그러나 SimpleCursorAdapter에는 데이터를 할당하기위한 "_id"(BaseColumns._ID) 필드가 필요합니다. 따라서 데이터베이스 생성 중에 그러한 필드를 선언하지 않으면 테이블에 조인 할 수 없습니다. 내가 생각하고있는 것은, 내가 구현 한 메소드를 사용하여 테이블에 가입 한 후 어떻게 "_id"컬럼을 만들 수 있는가이다. –
링크가 작동하지 않습니다. 몇 가지 질문입니다.당신은 어떻게 mDB를 얻습니까? 문서화되지 않았으므로 연락처 데이터베이스를 활용하는 것이 쉽지 않은 것처럼 보입니다. 그리고 mSB는 무엇입니까? – rycfung
mDB가 SQLiteDatabase 인스턴스입니다. mSB는 StringBuilder입니다. 릴리스의 소스 코드를 되돌아보아야했습니다. –