0

次のクエリを使用して、Android SQLite に 2 つのテーブルを作成しました。

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)});

これで動作します。メソッドの 2 番目のパラメーターとして?呼び出されplaceholder、値 from に置き換えられるものを使用することをお勧めします。String-arrayrawQuery()

から最後の;文字も削除します。TABLE_COURSE_CREATE String

注:常に使用してください。このアプローチを使用すると、問題を回避できます。

于 2013-02-17T21:19:36.697 に答える
1

役立つ回答を得る可能性を高めるための 2 つのヒント (または、自分で問題を解決することをお勧めします):

  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 に答える