2013-06-21 6 views
0

Очень простой оператор SQL не работает, никаких идей?Оператор SQL в методе rawquery не работает

rawQuery("SELECT * FROM " + CITY_TABLE + ";", columns); 

ошибка из StackTrace

android.database.sqlite.SQLiteBindOrColumnIndexOutOfRangeException: 
bind or column index out of range: handle 0x19b098006- 

остальная часть кода

public ArrayList<String> getCitiesFromCountry(int countryCode){ 
    String[] columns = new String[]{CITY_NAME}; 
    ArrayList<String> cityNames = new ArrayList<String>(); 
    Cursor cursor = sqLiteDatabase.rawQuery("SELECT * FROM " + CITY_TABLE + ";", columns); 

    if (cursor != null){   
     while(cursor.moveToNext()){ 
     cityNames.add(cursor.getString(cursor.getColumnIndex(CITY_NAME))); 
     .... 
     } 
     ... 
    } 
    return cityNames; 
} 

базы данных констант

public static final String WORLD_DATABASE = "world_database"; 
public static final String COUNTRY_TABLE = "country_table"; 
public static final String CITY_TABLE = "city_table"; 
public static final int DATABASE_VERSION = 1; 
public static final String _ID = "_id"; 
public static final String _ID2 = "_id2"; 
public static final String COUNTRY_NAME = "country_name"; 
public static final String CITY_NAME = "city_name"; 
+0

удалить; от последнего в запросе .. – Riser

ответ

2

Если вы хотите, чтобы получить все столбцы, которые вы не требуют, что второй param в сыром запрос

rawQuery("SELECT * FROM " + CITY_TABLE , null); 

И если вы хотите, чтобы получить конкретные строки, то использовать, как это ...

rawQuery("SELECT COL1, COL2 FROM " + CITY_TABLE + " WHERE COL1 = ? AND COL2 = ?", new String[] {"CRUSADER", "CITY"}); 
2

Для необработанного запроса, вы не поставите столбцы для 2-го параметра Я, как и те, где для аргументы. т.е. иметь такой запрос, как

db.rawQuery("SELECT * FROM " + CITY_TABLE + " WHERE city_name = ?;", new String[]{"Moon"}); 

Если вы хотите иметь столбцы, исходящие из массива строк. Вы можете использовать.

db.query(CITY_TABLE, COLUMNS, null, null, null, null, null); 

Это будет выбрать city_table, для колонн

2

Зачем вам нужно в заявлении columns? Он не нужен:

rawQuery("SELECT * FROM " + CITY_TABLE, null); 

Если вы хотите передать аргументы выбора, вы должны использовать его. Например, если вы хотите выбрать только те строки, с city_name = 'New York'

rawQuery("SELECT * FROM " + CITY_TABLE + " WHERE " + CITY_NAME + " = ?", new String[] {"New York"}); 

Смотрите this для получения дополнительной информации.

1

Вы должны попробовать удалить ';' знак из запроса select Это то, что может вызвать проблему, а также проверить количество столбцов , и число столбцов может быть причиной.

0
Try to get the result using either of these two methods 
     while(cursor.moveToNext()){ 
     cityNames.add(cursor.getString(Column_Name); 
     or 
     cityNames.add(cursor.getString(ColumnIndex); 
     } 

и в необработанном запросе вы можете удалить второй аргумент очень хорошо и заменить его как null. db.rawQuery ("Выбрать * из" + Table_Name, null);