0

非常に単純な 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";
4

5 に答える 5

2

すべての列を取得する場合は、rawquery の 2 番目のパラメーターは必要ありません

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

特定の行を取得したい場合は、次のように使用します...

rawQuery("SELECT COL1, COL2 FROM " + CITY_TABLE + " WHERE COL1 = ? AND COL2 = ?", new String[] {"CRUSADER", "CITY"});
于 2013-06-21T04:56:33.653 に答える
2

生のクエリの場合、2 番目のパラメーターの列は where 引数用であるため、配置しません。つまり、次のようなクエリがあります

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

文字列配列から列を取得したい場合。使えます。

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

これにより、列にcity_tableが選択されます

于 2013-06-21T04:56:48.160 に答える
2

なぜcolumns声明に必要なのですか?あなたはそれを必要としません:

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

選択引数を渡したい場合は、それを使用する必要があります。たとえば、次の行のみを選択する場合city_name = 'New York'

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

詳細については、これを参照してください。

于 2013-06-21T05:01:47.867 に答える
1

「;」を削除してみてください。選択クエリからの署名それが問題の原因である可能性があります。列の数も確認してください。列の数も原因である可能性があります。

于 2013-06-21T05:04:23.400 に答える
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); 
      }

生のクエリでは、2 番目の引数を適切に削除して、null に置き換えることができます。db.rawQuery("Select * from "+Table_Name,null);

于 2013-06-21T05:07:19.487 に答える