Ошибка запроса базы данных sqlite в android studio - PullRequest
1 голос
/ 02 августа 2020

У меня проблема в моем приложении, чтобы узнать, есть ли кто-нибудь, кто может мне помочь.

Оказывается, в моем приложении я создал базу данных с SQLite, в которой есть две таблицы, одна для игроков и один для результатов.

@Override
public void onCreate(SQLiteDatabase BaseDeDades) {
    BaseDeDades.execSQL("create table jugadors(codi int primary key, nom text, cognoms text, data date, club text, categoria text)");
    BaseDeDades.execSQL("create table resultats(codipuntuacio int primary key, codijugador int,codiexercici text, puntuacio text, temps long, data date)");
}

Чтобы просмотреть первую из таблиц (игроков), которая показывает список всех игроков, введенных в базу данных, я сделал это следующим образом.

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_llistajug);
    Llistajugadors();
}

public void Llistajugadors(){
    AdminSQLiteOpenHelper admin = new AdminSQLiteOpenHelper(this,"administracio",null,1);
    SQLiteDatabase BaseDeDades = admin.getWritableDatabase();
    if(BaseDeDades!=null){
        Cursor c= BaseDeDades.rawQuery("select * from jugadors",null);
        int quantitat = c.getCount();
        int i=0;
        String[] array = new String[quantitat];
        if (c.moveToFirst()){
            do{

                String linia = c.getInt(0)+"-"+c.getString(1);

                array[i] = linia;
                i++;

            }while(c.moveToNext());
        }
        ArrayAdapter<String>adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,array);
        final ListView llista = (ListView)findViewById(R.id.llista);
        llista.setAdapter(adapter);

        llista.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Intent intent = getIntent();
                intent.putExtra("dato2", llista.getItemAtPosition(position).toString());
                setResult(RESULT_OK,intent);
                finish();
            }
        });
    }
}

}

Проблема возникла при попытке обратиться к данным другой таблицы (результатов), так как я пытался сделать это таким же образом

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_llistajug);

    jugador = getIntent().getStringExtra("name");
    exercici = getIntent().getStringExtra("exercise");

    nom = jugador.split("-")[1];
    codi = Integer.parseInt(jugador.split("-")[0]);

    Resultats();

}

public void Resultats() {
    AdminSQLiteOpenHelper admin = new AdminSQLiteOpenHelper(this, "administracio", null, 1);
    SQLiteDatabase BaseDeDades = admin.getWritableDatabase();
    if (BaseDeDades != null) {
        Cursor c2 = BaseDeDades.rawQuery("select * from resultats",null);
        int quantitat2 = c2.getCount();
        int i2 = 0;
        String[] array2 = new String[quantitat2];
        if (c2.moveToFirst()) {
            do {

                String linia2 = c2.getInt(0) + "-" + c2.getString(1);

                array2[i2] = linia2;
                i2++;

            } while (c2.moveToNext());
        }
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, array2);
        final ListView llista2 = (ListView) findViewById(R.id.llista2);
        llista2.setAdapter(adapter);
    }
}

}

Но при выполнении этого действия в этом случае приложение останавливается.

Кто-нибудь знает, почему, если я сделал то же самое? Спасибо

Это ошибка, которая появляется в Logcat при выполнении действия: Ошибка Logcat

Спасибо, ошибка исправлена. Но теперь у меня возникла другая проблема с запросом. Как я могу сделать запрос для строки?

codijugador i codi - это целые числа, и он работает правильно, но добавление другого параметра codiexercici = exerici, которые являются строками, дает мне ошибку, они не выполняются таким же образом?

Спасибо, ошибка исправлена. Но теперь у меня возникла другая проблема с запросом. Как сделать запрос строки?

Спасибо, ошибка исправлена. Но теперь у меня возникла другая проблема с запросом. Как я могу сделать запрос для строки?

co-player i codi - целые числа, и он работает правильно, но добавление другого параметра codiexercici = exerici, которые являются строками, дает мне ошибку, разве они не выполняются так же?

            Cursor c = BaseDeDades.rawQuery("select * from resultats where codijugador = "+codi+" and codiexercici="+exercici, null);

1 Ответ

0 голосов
/ 03 августа 2020

Строка должна быть заключена в одинарные кавычки, но этого не следует делать, объединяя параметры и одинарные кавычки. Используйте заполнители ? для параметров и второй аргумент rawQuery(), чтобы передать их:

Cursor c = BaseDeDades.rawQuery(
    "select * from resultats where codijugador = ? and codiexercici = ?",
    new String[] {String.valueOf(codi), exercici}
);
...