1

データベース テーブルの 1 つからデータをフェッチしようとしています。これをチェックして、エラーを見つけられるかどうかを確認してください。

SQLiteDatabase db = SQLiteDatabase.openDatabase(DB_PATH, null,
            SQLiteDatabase.OPEN_READONLY);

    Cursor cursor = db.query(TABLE_CLASSES, new String[] { TABLE_C_DAY,
            TABLE_C_NAME, TABLE_C_DAY, TABLE_C_LOCATION, TABLE_C_TIMEHR,
            TABLE_C_TIMEMIN, TABLE_C_DURATION, TABLE_C_ONETIMEEVENT,
            TABLE_C_CTYPE, TABLE_C_OCCURINGWEEK}, TABLE_C_DAY + "=?",
            new String[] { String.valueOf(day) }, null, null, null, null);

わかりましたのでDB_PATH、間違いなく正しいです。私はdb接続を閉じようとしましたが、正常に動作するため、dbは正常に動作し、存在します。

これらは onCreate でデータベースを作成するために使用され、正常に機能したため、すべてのテーブル列名は正しいです。私も使ってみました

db.rawQuery("SELECT * FROM " + TABLE_CLASSES + " WHERE day = ?", new String[] { String.valueOf(day) });

そのため、クエリを実行するとアプリが停止しSource code not found、Eclipse でメッセージが表示されます。LogCat は、テーブル 'classes' が存在しないことを示しています。

作成コードを手動で試してみましたが、うまくいきました。onCreate(SQLiteDatabase db); のコードは次のとおりです。

String CREATE_DB_WITH_INIT_VALUES = 
            "CREATE TABLE %1$s (%4$s TEXT);" +
            "INSERT INTO %1$s VALUES('Lecture');" +
            "INSERT INTO %1$s VALUES('Lab');" +
            "INSERT INTO %1$s VALUES('Tutorial');" +
            "INSERT INTO %1$s VALUES('Meeting');" +
            "INSERT INTO %1$s VALUES('Examples Class');" +
            "CREATE TABLE %2$s (%5$s smallint, %6$s varchar(40), %7$s varchar(10), %8$s smallint, %9$s smallint, %10$s smallint, %11$s boolean, %12$s smallint, %13$s smallint);" +
            "INSERT INTO %2$s VALUES(1,'COMP12112 Computation',1.1,9,0,60,'False','Lecture',3);" +
            "INSERT INTO %2$s VALUES(1,'COMP16212 Java OOP 2',1.1,11,0,45,'False','Lecture',3);" +
            "INSERT INTO %2$s VALUES(1,'COMP18111 Distributed Systems','Unix',13,15,60,'False','Lab',3);" +
            "INSERT INTO %2$s VALUES(2,'Tutorial','LF13',15,0,60,'False','Tutorial',3);" +
            "INSERT INTO %2$s VALUES(2,'COMP14111 AI','LF31',10,30,60,'False','Lab',3);" +
            "CREATE TABLE %3$s (%14$s smallint, %15$s smallint, %16$s TEXT, %17$s date);";

    CREATE_DB_WITH_INIT_VALUES = String.format(CREATE_DB_WITH_INIT_VALUES, TABLE_CLASS_TYPES,
            TABLE_CLASSES, TABLE_DEADLINES, TABLE_CT_TYPE,
            TABLE_C_DAY, TABLE_C_NAME, TABLE_C_LOCATION, TABLE_C_TIMEHR, TABLE_C_TIMEMIN, TABLE_C_DURATION,
            TABLE_C_ONETIMEEVENT, TABLE_C_CTYPE, TABLE_C_OCCURINGWEEK,
            TABLE_D_TIMEHR, TABLE_D_TIMEMIN, TABLE_D_DTEXT, TABLE_D_DDATE
            );

    db.execSQL(CREATE_DB_WITH_INIT_VALUES);

このコードはクラッシュせず、すべて問題ないように見えますが、クエリ中にテーブルが見つかりません。

何が間違っているのですか?

4

2 に答える 2

1

私は SQL の専門家ではありませんが、テーブルを作成するときに少しやりすぎていると思います。テーブルを作成し、2 つの異なる手順で初期データを追加することをお勧めします。

データベースに初期データはありませんが、これを使用してテーブルを作成しています。

createTable = "CREATE TABLE " + TABLE_NAME + "(" + COLUMN_ID + " INTEGER PRIMARY KEY," + 
COLUMN_ONE + " TEXT," + COLUMN_TWO + " INTEGER," + COLUMN_THREE + " TEXT," +
COLUMN_FOUR + " TEXT," + COLUMN_FIVE + " TEXT)";

db.execSQL(createTable);

あなたの場合、テーブルを作成した後、必要な初期データを挿入できます。後

db.execSQL(createTable);

を使用しContentValuesて、必要なデータをデータベースに追加します。

contentValues = new ContentValues();
contentValues.putXXX();
// keep adding data
// the insert method will add the data for you.
SQLiteDatabase.insert(TABLE_NAME, null, contentValues);
于 2013-02-26T21:14:02.060 に答える