Java 我的应用程序在单击ListView中的项目时崩溃并创建SQLite编译错误。怎么了?

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

以下是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,其中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