在android studio中查询sqlite数据库时出错



我的应用程序有问题,想看看是否有人可以帮助我。

事实证明,在我的应用程序中,我用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是整数,它工作正常,但添加另一个参数codiexercci=exerci(字符串(会给我一个错误,它们不是以同样的方式完成的吗?

谢谢,错误已经修复。但现在我对查询有另一个问题。如何查询字符串?

谢谢,错误已经修复。但现在我对查询有另一个问题。如何查询字符串?

co-player i codi是整数,它工作正常,但添加另一个参数codiexercici=exerci(字符串(会给我一个错误,它们不是以同样的方式完成的吗?

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

字符串必须包含在单引号内,但这是不应该通过连接参数和单引号来实现的
使用参数的?占位符和rawQuery()的第二个参数来传递它们:

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

最新更新