【问题标题】:No such column: ID(code1): , while compling: SELECT *没有这样的列:ID(code 1): ,编译时:SELECT *
【发布时间】:2016-12-07 16:01:08
【问题描述】:

我有作业,但有一些错误,这是我的代码:

private void initUI() {
    // TODO Auto-generated method stub
    Intent i =getIntent();
    String id =i.getStringExtra("ID");
    SQLiteDatabase database = Database.initDatabase(this, DB_NAME);
    Cursor cursor = database.rawQuery("SELECT * FROM Student WHERE ID = "+id,null);
    cursor.moveToFirst();
    String ten = cursor.getString(1);
    String sdt = cursor.getString(2);
    String classid = cursor.getString(3);
    byte[] anh= cursor.getBlob(4);

    Bitmap bitmap = BitmapFactory.decodeByteArray(anh, 0,anh.length);
    imgupdate.setImageBitmap(bitmap);
    edtid.setText(id);
    edtname.setText(ten);
    edtsdt.setText(sdt);
}

和错误

12-07 22:55:13.831:E/AndroidRuntime(15694):致命异常:主要 12-07 22:55:13.831: E/AndroidRuntime(15694): 进程: com.example.assignment_android_ps04360,PID:15694 12-07 22:55:13.831: E/AndroidRuntime(15694): java.lang.RuntimeException: 无法启动 活动 组件信息{com.example.assignment_android_ps04360/com.example.assignment_android_ps04360.UpdateActivity}: android.database.sqlite.SQLiteException:没有这样的列:ID(代码1): ,编译时:SELECT * FROM Student WHERE ID = PS04107 12-07 22:55:13.831:E/AndroidRuntime(15694):在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2299)

表格: Table.png

【问题讨论】:

  • 您是否正确定义了 Student 表?
  • 你能把Student的表给看一下吗?
  • 它只是说明ID列不存在于Student表中的错误!
  • 我附上了表格,它是table.png
  • “SQL 注入攻击”这句话对您来说意味着什么吗?如果有人输入 'PS04107'; DELETE FROM Student; -- 的 ID 怎么办?

标签: java android sql database sqlite


【解决方案1】:

一种简单的调试方法是在将其放入程序之前直接针对 sqlite 运行查询。

这里的一个问题是您与ID 比较的值不是带引号的字符串。你需要制作更像

SELECT * FROM Student WHERE ID = 'PS04107'

您应该pass selectionArgs to the query method,而不是将查询构建为字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-15
    相关资源
    最近更新 更多