一个非常简单的SQL语句无效,有什么想法吗?
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 :(得分:2)
如果要检索所有列,则不需要在rawquery中使用第二个参数
rawQuery("SELECT * FROM " + CITY_TABLE , null);
如果你想检索特定的行,那就像这样使用......
rawQuery("SELECT COL1, COL2 FROM " + CITY_TABLE + " WHERE COL1 = ? AND COL2 = ?", new String[] {"CRUSADER", "CITY"});
答案 1 :(得分: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 :(得分: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。
答案 3 :(得分:1)
你应该尝试删除';'从选择查询中签名 这可能是导致问题的原因,也是检查列的数量 列的数量也可能是原因。
答案 4 :(得分: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(“Select * from”+ Table_Name,null);