我试图在我的应用程序中实现分数功能,但我总是得到主标题中的相同错误,我的错误在以下按钮
em=bundle.getString("EMAIL");
SQL usdbh =new SQL (this, "DBUsuarios", null, 1);
final SQLiteDatabase db = usdbh.getWritableDatabase();
button2.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0)
{
Cursor c = db.rawQuery(" SELECT p1,p2,p3,p4,p5 FROM Usuarios WHERE Email='"+em+"' ", null);
c.moveToFirst();
p1= c.getInt(0);
p2= c.getInt(1);
p3= c.getInt(2);
p4= c.getInt(3);
p5= c.getInt(4);
if(n7>p1){
db.execSQL("UPDATE Usuarios SET p1="+n7+" WHERE Email='"+em+"' ");
db.execSQL("UPDATE Usuarios SET p2="+p1+" WHERE Email='"+em+"' ");
db.execSQL("UPDATE Usuarios SET p3="+p2+" WHERE Email='"+em+"' ");
db.execSQL("UPDATE Usuarios SET p4="+p3+" WHERE Email='"+em+"' ");
db.execSQL("UPDATE Usuarios SET p5="+p4+" WHERE Email='"+em+"' ");
}
if(n7>p2&&n7<p1){
db.execSQL("UPDATE Usuarios SET p2="+n7+" WHERE Email='"+em+"' ");
db.execSQL("UPDATE Usuarios SET p3="+p2+" WHERE Email='"+em+"' ");
db.execSQL("UPDATE Usuarios SET p4="+p3+" WHERE Email='"+em+"' ");
db.execSQL("UPDATE Usuarios SET p5="+p4+" WHERE Email='"+em+"' ");
}
if(n7>p3&&n7<p2){
db.execSQL("UPDATE Usuarios SET p3="+n7+" WHERE Email='"+em+"' ");
db.execSQL("UPDATE Usuarios SET p4="+p3+" WHERE Email='"+em+"' ");
db.execSQL("UPDATE Usuarios SET p5="+p4+" WHERE Email='"+em+"' ");
}
if(n7>p4&&n7<p3){
db.execSQL("UPDATE Usuarios SET p4="+n7+" WHERE Email='"+em+"' ");
db.execSQL("UPDATE Usuarios SET p5="+p4+" WHERE Email='"+em+"' ");
}
if(n7>p5&&n7<p4){
db.execSQL("UPDATE Usuarios SET p5="+n7+" WHERE Email='"+em+"' ");
}
c.close();
Intent intent2 = new Intent(Cinco.this, MainActivity.class);
Bundle b = new Bundle();
b.putInt("PUNT", n7);
intent2.putExtras(b);
startActivity(intent2);
}
});
我在MainActivity类中做了相同的光标没有错误,但是它只是将得分放在textViews中它没有将值插入表中
分数正确插入但我总是得到“不幸的是,MyApp已经停止了”。 =( 有任何想法吗? PD =这是我的第一个问题,如果我做错了,请耐心等待=)
答案 0 :(得分:1)
首先,总是发布整个堆栈跟踪。
其次,您尝试访问没有结果的游标。这导致你崩溃。检查moveToFirst的返回值。如果返回false,则表示没有结果,无需访问它。
此外,永远不要编写带有串联的SQL查询来生成WHERE子句。始终使用绑定变量。使用连接会导致SQL注入风险,并且它会阻止数据库针对通用查询进行优化。