2013-06-21 27 views
0

一个非常简单的SQL语句不工作,有什么想法?原始查询方法中的SQL语句不工作

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

从堆栈跟踪误差

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

如果你想要检索的所有列你不要求第二原始参数查询

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

如果你想要检索特定的行再使用这样的...

rawQuery("SELECT COL1, COL2 FROM " + CITY_TABLE + " WHERE COL1 = ? AND COL2 = ?", new String[] {"CRUSADER", "CITY"}); 
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

您应该尝试删除';'从选择查询中签名 这就是可能导致问题的原因,同时检查列的数量 列的数量也可能是原因。

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);