2013-06-21 33 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);