0

我使用以下查询在 Android SQLite 中创建了两个表:

public static final String TABLE_SEMESTER_CREATE = "CREATE TABLE "
        + SemesterTable.TABLE_NAME + " (" + SemesterTable.ID_PK
        + " INTEGER PRIMARY KEY AUTOINCREMENT, " + SemesterTable.TITLE
        + " TEXT," + SemesterTable.START_DATE + " TEXT, "
        + SemesterTable.END_DATE + " TEXT) ";


public static final String TABLE_COURSE_CREATE = "CREATE TABLE "
        + CourseTable.TABLE_NAME + " (" + CourseTable.ID_PK
        + " INTEGER PRIMARY KEY AUTOINCREMENT, " + CourseTable.COURSE_CODE
        + " TEXT, " + CourseTable.COURSE_NAME + " TEXT, "
        + CourseTable.LOCATION + " TEXT, " + CourseTable.SEMESTER_ID_FK
        + " INTEGER, " + "FOREIGN KEY (" + CourseTable.SEMESTER_ID_FK
        + ") REFERENCES " + SemesterTable.TABLE_NAME + " ("
        + SemesterTable.ID_PK + "));";

然后我在父表和子表中插入了一些数据。问题是当我执行查询时:

String query = "SELECT * FROM " + CourseTable.TABLE_NAME + " WHERE "
            + CourseTable.SEMESTER_ID_FK + " = 1;";
    database.rawQuery(query, null);;

它不执行。你能帮我摆脱这个错误吗?我也试过了。

database.query(CourseTable.TABLE_NAME, CourseTable.allColumns,
    CourseTable.SEMESTER_ID_FK + " = ? ",
    new String[] { String.valueOf(semesterID) }, null, null, null);

但它也不起作用!

4

3 回答 3

2

;问题是不允许的字符。因此,像这样更正您的查询:

String query = "SELECT * FROM " + CourseTable.TABLE_NAME + " WHERE "
            + CourseTable.SEMESTER_ID_FK + " = ?";
database.rawQuery(query, new String[] {String.valueOf(1)});

现在它将起作用。我建议您使用?被称为 asplaceholder并将替换为 value fromString-array作为rawQuery()方法的第二个参数。

还要;从您的.TABLE_COURSE_CREATE String

注意:始终使用它,使用这种方法可以避免任何问题。

于 2013-02-17T21:19:36.697 回答
1

两个技巧可以增加您获得有用答案的机会(或者更好的是,自己解决问题):

  1. 实际的错误信息是什么?SQLite 通常会告诉你为什么它不能运行你的查询。
  2. 代替您在此处提供的(几乎难以辨认的)代码,您可以记录生成的 SQL 并在此处发布吗?
于 2013-02-17T20:35:41.850 回答
0

你错过了一个等号吗?您的第一个查询正在评估为:

SELECT * FROM TABLE WHERE FIELD1

改变这个:

"SELECT * FROM " + CourseTable.TABLE_NAME + 
" WHERE " + CourseTable.SEMESTER_ID_FK + "1;"

到:

"SELECT * FROM " + CourseTable.TABLE_NAME + 
" WHERE " + CourseTable.SEMESTER_ID_FK + "=1;"
于 2013-02-17T12:04:54.647 回答