He estado usando SQLite en Android por mucho tiempo, pero es la primera vez que realizo una operación de combinación de tabla. Estoy totalmente frustrado porque he estado trabajando en eso todo el día.SQLite: Cómo unir tablas y presentar el cursor usando SimpleCursorAdapter
Ahora tengo 2 tablas, FTSProfile y FTSCell, y quiero unirlas usando una tecla común A con un LEFT JOIN. Así que implementé una serie de código, ContentProvider y Database para realizar lo que quiero. En la base de datos, utilicé SQLiteQueryBuilder para construir la consulta y obtener el cursor que quiero. Solía:
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);
y mi Hashmap es como:
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);
Y luego, cuando corro el programa y tratar de abrir la lista para el resultado, me sale un SQLiteException: no such column: _id...
tengo No tengo ideas de cómo resolverlo, pero realmente quiero saber cómo puedo deshacerme de él. ¿Alguien puede ayudar?
pero el problema es que SimpleCursorAdapter requiere un campo "_id" (BaseColumns._ID) para asignar los datos. Entonces, si no declaro ese campo durante la creación de la base de datos, no me permitirían unirme a la mesa. Lo que estoy pensando es, ¿cómo puedo hacer una columna "_id" después de unirme a la tabla utilizando el método que implementé? –
El enlace está muerto. Par de preguntas.¿Cómo obtienes mDB? Parece que no es trivial acceder a la base de datos de contactos ya que no está documentada. ¿Y qué es mSb? – rycfung
mDB es su instancia SQLiteDatabase. mSB es un StringBuilder. Tuve que mirar hacia atrás el código fuente del lanzamiento. –