Java 未返回Android studio SQLite主键

Java 未返回Android studio SQLite主键,java,android,database,sqlite,Java,Android,Database,Sqlite,我有一个名为student的表,使用SQLite,我正在尝试使用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 + "\

我有一个名为student的表,使用SQLite,我正在尝试使用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,使用一个整数自动递增,不起作用,因此,我不知道,等待您的帮助,谢谢

我怀疑崩溃实际上在下一行,因为您正在尝试从第一行之前的位置提取数据

我建议试试:-

public int getID(String name, String surname){
    int id = -1;
    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
    if (cursor.moveToFirst) {
        id = cursor.getInt(0);
    }
    return id;
}

也就是说,如果光标不是空的,那么您将移动到第一行并从实际行提取数据。如果光标为空,则返回-1。

SQL中的字符串放入
“单引号”
“双引号字符串”
被视为标识符,您会得到一个关于它们的语法错误,因为这些名称没有列

为了避免引用和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突出显示的无效光标位置问题而崩溃。

崩溃是什么意思?stacktrace会很有帮助

无论如何,除了其他人提到的以外,您的SQL中还有一个输入错误:

"SELECT* FROM "
我想你需要一个空间在*:

"SELECT * FROM "

不是真的:我的
sqlite3
甚至接受类似
“从表名称中选择*…”
-当然你是对的,这不是编写sql查询的好形式,但它们可以工作…-返回1,这意味着我的主键未生成且为空,这正常吗?顺便说一下,谢谢你的回答!它正在工作,在我的查询中,我加上“;”这就是它不工作的原因,谢谢!因为我需要另一个表的Id,该表将student_Id作为外键。我使用微调器,它显示学生的姓名,我知道这不是最佳方法,但我不知道如何在没有我的条件下获取Id,因为用户将通过填写姓名和姓氏字段手动添加学生,他可以添加标记,然后他可以咨询他的所有学生(他们的分数是我的另一张表),这就是我的应用程序目前正在做的事情。