java - 单击 ListView 中的项目时,我的应用程序崩溃并创建 SQLite 编译错误。怎么了?
问题描述
这是 logcat 中的崩溃报告:
android.database.sqlite.SQLiteException: near "Press": syntax error (code 1 SQLITE_ERROR): , while compiling: SELECT ID FROM BUTTONMANAGER WHERE FULL_NAME = James Smith AND DATE_ADDED = 7/30/2020
我正在尝试获取数据库中列表视图中的项目名称与 FULL_NAME 匹配并且添加的日期与 DATE_ADDED 匹配的行的项目 ID。
我不确定我在这里做错了什么。我查看了我的 queryString 的语法,没有发现任何错误。当我只检查 FULL_NAME 而不是 DATE_ADDED 时,应用程序不会崩溃。但是,我想检查 DATE_ADDED 以确保我删除了数据库中的正确行。
这是我的 DatabaseHelper 代码:
public Cursor getItemID(String name, String dateAdded) {
SQLiteDatabase db = this.getWritableDatabase();
String queryString = "SELECT " + COLUMN_ID + " FROM " + BUTTON_MANAGER + " WHERE " + COLUMN_FULL_NAME + " = " + name + " AND " + COLUMN_DATE_ADDED + " = " + dateAdded;
Cursor data = db.rawQuery(queryString, null);
return data;
}
这是我的主要活动:
mainListView = (ListView) findViewById(R.id.mainListView);
mainListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String name = parent.getItemAtPosition(position).toString();
String dateAdded = dateButton.getText().toString();
Cursor data = databaseHelper.getItemID(name, dateAdded); //Get ID associated with name of item in ListView
int itemID = -1;
while(data.moveToNext()) {
itemID = data.getInt(0);
}
if (itemID > -1) {
Intent editExerciseIntent = new Intent(MainActivity.this, edit_existing_exercise.class);
editUserIntent.putExtra("id", itemID);
editUserIntent.putExtra("name", name);
editUserIntent.putExtra("dateAdded", dateAdded);
startActivity(editUserIntent);
overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_right);
}
}
});
}
当我单击 ListView 中的项目时发生崩溃。
更多崩溃报告:
android.database.sqlite.SQLiteException: near "Press": syntax error (code 1 SQLITE_ERROR): , while compiling: SELECT ID FROM BUTTONMANAGER WHERE FULL_NAME = James Smith AND DATE_ADDED = '7/30/2020'
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1016)
at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:623)
at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:590)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:61)
at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:46)
at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1545)
at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1484)
at com.mycompany.mainapp.DatabaseHelper.getItemID(DatabaseHelper.java:118)
at com.mycompany.mainapp.MainActivity$15.onItemClick(MainActivity.java:404)
at android.widget.AdapterView.performItemClick(AdapterView.java:330)
at android.widget.AbsListView.performItemClick(AbsListView.java:1187)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:3179)
at android.widget.AbsListView$3.run(AbsListView.java:4097)
at android.os.Handler.handleCallback(Handler.java:907)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7478)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:549)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:941)
解决方案
看起来语法错误是由于您添加的日期中的斜杠造成的。
尝试这个
String queryString = "SELECT " + COLUMN_ID + " FROM " + BUTTON_MANAGER + " WHERE " + COLUMN_FULL_NAME + " = " + name + " AND " + COLUMN_DATE_ADDED + " = '" + dateAdded + "'";
推荐阅读
- excel - 使用 Excel VBA 单击 URL 中的 Java 按钮
- java - adb 命令设置 android 11 设备的音量
- python - 绘图对象中的颜色离散序列
- javascript - 使用 docker 运行我的 express 应用程序时遇到问题
- maven-plugin - 缺少 Maven GPG 插件 3.0.0
- sql - sql性能查询同一列上的多个条件
- gradle - gradle 无法为项目'获取未知属性'战争'
' org.gradle.api.Project 类型 - angular - 如何更新 FormArray 中的大量项目
- coq - 在列表中查找正常工作的定理
- jira - 为整个团队提供可访问远程桌面的屏幕共享工具推荐