Java 我的应用程序在单击ListView中的项目时崩溃并创建SQLite编译错误。怎么了?
以下是logcat中的碰撞报告:Java 我的应用程序在单击ListView中的项目时崩溃并创建SQLite编译错误。怎么了?,java,android,sqlite,android-studio,Java,Android,Sqlite,Android Studio,以下是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 我试图获取数据库中某行的项目ID,其中listvi
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
我试图获取数据库中某行的项目ID,其中listview中的项目名称与FULL_name匹配,添加的日期与添加的日期匹配
我不确定我做错了什么。我检查了查询字符串的语法,没有发现任何错误。当我只检查全名而不检查添加的日期时,应用程序不会崩溃。但是,我想检查添加的日期,以确保删除数据库中的正确行
这是我的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 + "'";
最后,这个问题有了解决办法。我不得不在queryString中的变量周围添加额外的引号。queryString的语法如下所示:
String queryString = "SELECT " + COLUMN_ID + " FROM " + BUTTON_MANAGER + " WHERE " + COLUMN_FULL_NAME + " = '" + name + "'" + " AND " + COLUMN_DATE_ADDED + " = '" + dateAdded + "'";
@Dave Newton您的回答是正确的,我最初回答时没有正确使用语法
感谢所有回应和帮助我的人。非常感谢。您不需要在sql中的字符串值周围加引号吗?我在queryString中的字符串变量周围加了引号,但是当我在ListView中单击该项时,会出现相同的logcat错误。是否还有其他错误或sql查询?奇怪的是,它说在按下按钮附近有一个错误,但该字符串没有出现在任何地方。您应该了解准备好的语句。我有几个其他的查询字符串,它们创建了这个表和其他表,并允许我创建、编辑和删除这些表中的数据。我觉得它提到媒体也很奇怪,但我没有地方写媒体。我将用更多错误更新我的原始帖子。我将queryString更改为您的建议,但在单击ListView中的某个项目时出现了相同的错误。logcat错误表示要特别查看游标数据=databaseHelper.getItemIDname,dateAdded//获取与ListView中项的名称关联的ID