Проблема запроса SQLite для Android - PullRequest
0 голосов
/ 26 августа 2011

Я изучаю, как использовать базы данных на Android, и пытаюсь привести простой пример, в котором у меня есть два текстовых поля [тормоза и об / мин], когда я ввожу значения в эти поля и нажимаю кнопку «запись», они вводятся в базу данных.стол "производительность".Когда я нажимаю кнопку «чтение», он должен запросить таблицу и распечатать содержимое, но я получаю следующую ошибку при запросе:

android.database.CursorIndexOutOfBoundsException: Индекс -1 запрашивается, с размером 0

Вот мой соответствующий код:

private static final String KEY_ROWID = "_id";
private static final String KEY_BRAKES = "brakes";
private static final String KEY_RPM="rpm";
private static final String DATABASE_NAME = "MyDB2";
private static final String DATABASE_TABLE = "performance";
private static final int DATABASE_VERSION=1;
private static final String DATABASE_CREATE = "create table performance (_id integer primary key autoincrement, " + "brakes text not null, rpm text not null);";


    //--insert an entry to the database--
public void insertData(String filter, String data){
    ContentValues entry = new ContentValues();

    if(filter.equals("b")){
        entry.put(KEY_BRAKES, data);
        Log.d(TAG,"inserted brake data");
        db.insert(DATABASE_TABLE, null, entry);
    }
    else if (filter.equals("r")){
        entry.put(KEY_RPM, data);
        Log.d(TAG,"inserted rpm data");
        db.insert(DATABASE_TABLE, null, entry);
    }


}

    //--retrive all entries
public Cursor getAllData(){
    Log.d(TAG,"about to query");
    try{
    Cursor c = db.query(DATABASE_TABLE, new String[]{KEY_BRAKES,KEY_RPM}, null, null, null, null, null);
    Log.d(TAG,"id=" + c.getString(0));

    return c;
    }catch(Exception e){
        Log.d (TAG,"error");
        Log.e(TAG,e.toString());
    }

    return null;
}

И способ ввода элементов следующий:

brakeRead = brakes.getText().toString();
rpmRead = brakes.getText().toString();
db.open();
db.insertData("b", brakeRead);
db.insertData("r", rpmRead);
db.close();

И способ, которым я запрашиваю, выглядит следующим образом:

                db.open();
            Cursor c = db.getAllData();
            if(c.moveToFirst())
            {
                do{
                    output.append("id: " +  c.getString(0) + " brakes: " + c.getString(1) + " rpm: " + c.getString(2));
                }while(c.moveToNext());
            }
            db.close();

Но я получаю эту ошибку при запросе: android.database.CursorIndexOutOfBoundsException: индекс -1 запрашивается, с размером 0

Может кто-нибудь увидеть, если я делаю что-то не так?

Ответы [ 3 ]

0 голосов
/ 26 августа 2011

Измените ваш код с

if(c.moveToFirst())
            {
                do{
                    output.append("id: " +  c.getString(0) + " brakes: " + c.getString(1) + " rpm: " + c.getString(2));
                }while(c.moveToNext());
            }

на

            while(c.moveToNext()){
                output.append("id: " +  c.getString(0) + " brakes: " + c.getString(1) + " rpm: " + c.getString(2));
            }

Обновление

Ваш запрос

Cursor c = db.query(DATABASE_TABLE, new String[]{KEY_BRAKES,KEY_RPM}, null, null, null, null, null);

который выбирает два столбца (BREAKS, RPM). Но вы запрашиваете 3 изменить его на

Cursor c = db.query(DATABASE_TABLE, new String[]{KEY_ROWID,KEY_BRAKES,KEY_RPM}, null, null, null, null, null);
0 голосов
/ 26 августа 2011

Вы установили оба тормоза и обороты в ноль, но вы вставляете данные в каждый столбец по одному.Я бы предложил переписать insertData следующим образом:

public void insertData(String brakes, String rpm){
ContentValues entry = new ContentValues();

    entry.put(KEY_BRAKES, brakes);
    Log.d(TAG,"inserted brake data");

    entry.put(KEY_RPM, rpm);
    Log.d(TAG,"inserted rpm data");
    db.insert(DATABASE_TABLE, null, entry);
}

Затем вы бы назвали его так:

brakeRead = brakes.getText().toString();
rpmRead = brakes.getText().toString();
db.open();
db.insertData(brakeRead, rpmRead);
db.close();
0 голосов
/ 26 августа 2011

Запрос идеально подходит для извлечения данных, но вы получили ошибку, как указано ниже, это означает, что у вас нет записи в вашей базе данных, поэтому я думаю, что что-то не хватает при вставке базы данных

android.database.CursorIndexOutOfBoundsException: индекс -1 запрашивается, с размером 0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...