2011-05-19 3 views
0

Я получил следующие 2 таблицы в базе данных моего приложенияAndroid SQLite Query

Table1:

FTSProfile 
----------- 
suggest_intent_data_id 
suggest_shortcut_id 
CELL_ID 
NAME 
_id 

Table2:

FTSCell 
----------- 
suggest_intent_data_id 
KEY_LAC 
suggest_shortcut_id 
_id 
KEY_MCC 
KEY_CID 
KEY_MCC 

И я хочу, чтобы выполнить левое соединение на столах, с KEY_CID = KEY_CELL_ID. Кажется, все прекрасно, пока я не хочу получить FTSCell._id и передать его как _ID в результирующей таблице. Я использовал SQLiteQueryBuilder, чтобы помочь строить запрос:

SQLiteQueryBuilder builder = new SQLiteQueryBuilder(); 
    builder.setTables(FTS_VIRTUAL_TABLE_PROFILE+" LEFT JOIN "+FTS_VIRTUAL_TABLE_CELL+" ON "+FTS_VIRTUAL_TABLE_CELL+"."+DataCellQuery.KEY_CID+"="+FTS_VIRTUAL_TABLE_PROFILE+"."+DataProfileQuery.KEY_CELL_ID); 
    builder.setProjectionMap(mColumnMap_CombinedTable); 
    Cursor cursor = builder.query(mDatabaseOpenHelper.getWritableDatabase(), columns, selection, selectionArgs, null, null, null); 
    if (cursor == null) return null; 
    else if (!cursor.moveToFirst()) { 
     cursor.close(); 
     return null; 
    } 
    return cursor; 

и здесь используется мой HashMap:

private static HashMap<String, String> buildColumnMap_CombinedTable() { 
     HashMap<String,String> map = new HashMap<String,String>(); 
     for (String key: DataCellQuery.KEYS) map.put(key, key); 
     map.put(BaseColumns._ID, "rowid AS " + FTS_VIRTUAL_TABLE_CELL+ "."+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); 
     return map; 
     } 

Запрос идеально подходит, если я не получаю _id из ячейки таблицы, но я это нужно в моем коде. Как я могу избавиться от этого? Следующее сообщение об ошибке, что я получаю ...

05-19 15:56:05.054: ERROR/AndroidRuntime(7772): Caused by: android.database.sqlite.SQLiteException: near ".": syntax error: , while compiling: SELECT rowid AS FTSCell._id, KEY_MCC, KEY_MNC, KEY_CID, KEY_LAC FROM FTSProfile LEFT JOIN FTSCell ON FTSCell.KEY_CID=FTSProfile.CELL_ID WHERE (NAME="PX9RKTPYW4") 

ответ

1

Синтаксис:

select table.field as name, ... 

не name as table.field.

+0

хотя я использовал другой способ решить проблему, наконец, thx anyway –

+0

не могли бы вы поделиться тем, что вы сделали, чтобы исправить вашу проблему? У меня такая же проблема –

Смежные вопросы