0

DatabaseHandler コード:

public class DatabaseHandler extends SQLiteOpenHelper { 

private static final String DATABASE_NAME = "mydb";

// 1st table --------------------------------------
private static final String TABLE_MODULE = "module";    
// Module table columns
private static final String KEY_MODULE_CODE = "code";
private static final String KEY_MODULE_TITLE = "title";
private static final String KEY_MODULE_SEMESTER = "semester";
private static final String KEY_MODULE_TIMETABLE= "timetable";


// 2nd table --------------------------------------
private static final String TABLE_URIS = "applicationURLs"; 
// Module table columns
private static final String KEY_SERVER_URI = "serverURI";
private static final String KEY_NEWS_URI = "newsURI";
private static final String KEY_MODULES_URI= "moduleURI";

// Constructor
public DatabaseHandler(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

/**
 * Creating tables
 */
@Override
public void onCreate(SQLiteDatabase db) {

      String CREATE_MODULE_TABLE = "CREATE TABLE "+ TABLE_MODULE + "("
            +   KEY_MODULE_CODE         +" TEXT PRIMARY KEY," 
            +   KEY_MODULE_TITLE        +" TEXT," 
            +   KEY_MODULE_TIMETABLE    +" TEXT," 
            +   KEY_MODULE_SEMESTER     +" TEXT);";     

      String CREATE_URIS_TABLE = "CREATE TABLE " + TABLE_URIS + "("
            + KEY_SERVER_URI    + " TEXT PRIMARY KEY," 
            + KEY_NEWS_URI      + " TEXT," 
            + KEY_MODULES_URI   + " TEXT);";

      db.execSQL(CREATE_MODULE_TABLE + CREATE_URIS_TABLE);       
}

/**
 * Upgrading database
 */
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    // Drop older table if existed
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_MODULE);
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_URIS);
    //Create tables again
    onCreate(db);
}

public void addModule(Module module) {

    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues values = new ContentValues();

    values.put(KEY_MODULE_TITLE, module.getTitle());                
    values.put(KEY_MODULE_CODE, module.getCode());  
    values.put(KEY_MODULE_TIMETABLE, module.getTimetable()); 
    values.put(KEY_MODULE_SEMESTER, module.getSemester());  

    db.insert(TABLE_MODULE, null, values); 
    db.close(); // Closing database connection
}

/**
 * Adding new server URIs
 * @param uris
 */
public void addURIs(ServerURIs uris){

    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues values = new ContentValues();

    values.put(KEY_SERVER_URI, uris.getServerURI()); 
    values.put(KEY_NEWS_URI, uris.getNewsURI());        
    values.put(KEY_MODULES_URI, uris.getModulesURI());  

    // Inserting Row
    db.insert(TABLE_URIS, null, values);
    db.close(); // Closing database connection
}
}

2 番目のテーブルに新しいレコードを追加すると、2 番目のテーブルが存在しないというエラーがスローされます。データベースにデータを追加する onCreate() のアクティビティのコード:

DatabaseHandler dbh  = new DatabaseHandler(this);
dbh.addURIs(serverURLs);

理由はわかりません。前もって感謝します。

4

1 に答える 1

4

1 回の呼び出しで複数のステートメントを実行することはできません。単純に 2 つ使用してください。

db.execSQL(CREATE_MODULE_TABLE);
db.execSQL(CREATE_URIS_TABLE);       

SQLiteDatabase のexecSQL(String sql)ドキュメントを引用するには:

パラメータ
sql - 実行する SQL ステートメント。セミコロンで区切られた複数のステートメントはサポートされていません。

于 2013-04-09T17:14:56.970 に答える