java - 未返回 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,整数自动递增,不工作,所以,我不知道,等你帮助我,谢谢
解决方案
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 突出显示的无效光标位置问题而崩溃。
推荐阅读
- c++ - 抛出多个异常时,catch 块执行的顺序是什么,为什么?
- kubernetes - 为什么内部通信的通信时间(速度)比以前慢了一点?
- javascript - 如何从控制器渲染两种类型的数据以在 node.js 中查看?
- ajax - 在 ajax 发布请求中,我的应用被 CORS 策略错误阻止
- c - printf 保存保活定时器
- python - (PUCHAR)_alaligned_malloc 在 python 中使用
- flutter - 如何切换到横向
- selenium - Selenium 与 Jenkins - 持续集成和部署
- html - 如何构建一个 HTML 链接来预填充此站点上的表单域
- javascript - 如何将数据填充到reactjs中表格列api内呈现的下拉列表中