首页 > 解决方案 > 未返回 Android Studio SQLite 主键

问题描述

我有一个使用 SQLite 的名为 student 的表,我正在尝试使用 SELECT 查询获取一个学生的 id,有我的方法:

 public int getID(String name, String surname){
    int id;
    String selectQuery = "SELECT* FROM " + TABLE_NAME + " WHERE " + COL_2 + " =\"" + name + "\" AND " + COL_3 + " =\"" + surname + "\";";
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(selectQuery,null); //App is crashing here
    id = cursor.getInt(0);
    return id;
}

我将数据插入数据库的代码:

 public boolean insertStudent(String name, String surname){
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put(COL_2, name);
    contentValues.put(COL_3, surname);
    long result=db.insert(TABLE_NAME,null,contentValues);
    if(result == -1)
        return false;
    else
        return true;
}

然后创建查询表:

 @Override
public void onCreate(SQLiteDatabase db){
    //Requête SQL de la création de la table student
    db.execSQL("CREATE table " + TABLE_NAME + "(student_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, surname TEXT)");

该应用程序在 db.rawQuery(selectQuery,null); 上崩溃,我不知道为什么。我尝试手动插入id,整数自动递增,不工作,所以,我不知道,等你帮助我,谢谢

标签: javaandroiddatabasesqlite

解决方案


SQL 中的字符串进入'single quotes'. 被"double quoted strings"视为标识符,并且您会收到有关它们的语法错误,因为这些名称没有列。

为了避免引用和避免 SQL 注入,最好将 SQL 参数作为变量提供,例如:

String selectQuery = "SELECT* FROM " + TABLE_NAME + " WHERE " + COL_2 + " =? AND " + COL_3 + " =?;";
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(selectQuery, new String[] { name, surname });

修复此问题后,您将因 MikeT 突出显示的无效光标位置问题而崩溃。


推荐阅读