gpt4 book ai didi

java - Android studio SQLite 主键未返回

转载 作者:行者123 更新时间:2023-12-02 10:29:12 35 4
gpt4 key购买 nike

我有一个使用 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,并使用整数自动递增,但不起作用,所以,我不知道,等待你帮助我,谢谢

最佳答案

SQL 中的字符串位于'单引号' 中。 “双引号字符串” 被视为标识符,并且您会收到有关它们的语法错误,因为这些名称没有列。

为了避免引用并避免 SQL 注入(inject),最好将 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 突出显示的无效光标位置问题而崩溃。

关于java - Android studio SQLite 主键未返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53704096/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com