0

私のアプリケーションには同じ電話に複数のユーザーがいる可能性があり、各ユーザーに独自の「ApplicationFriends」mysqliteテーブルを持たせたいです。テーブルの名前が「ApplicationFriends」のみの場合、すべてがうまく機能します。しかし、2345が一意のユーザー番号であるときにこの「ApplicationFriends2345」のようにテーブル名を設定しようとすると、selectクエリを実行しようとすると、テーブルが存在しないというエラーが常に発生します。

これは私のテーブル作成コードです:

public DatabaseManager(Context context, String id) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
    DatabaseManager.TABLE_APPLICATION_FRIENDS = TABLE_APPLICATION_FRIENDS_BASE + id;
}

@Override
public void onCreate(SQLiteDatabase db) {
    String CREATE_APPLICATIN_FRIENDS_TABLE = "CREATE TABLE IF NOT EXISTS "
            + TABLE_APPLICATION_FRIENDS + " (" + APPLICATION_FRIENDS_KEY_ID
            + " INTEGER PRIMARY KEY," + APPLICATION_FRIENDS_KEY_NAME
            + " TEXT" + ")";
    String CREATE_CHAT_TABLE = "CREATE TABLE IF NOT EXISTS " + TABLE_Chat
            + " (" + CHAT_KEY_SENDER_ID + " INTEGER," + CHAT_KEY_MESSAGE
            + " TEXT," + CHAT_KEY_TIME + " DateTime" + ")";

    db.execSQL(CREATE_APPLICATIN_FRIENDS_TABLE);
    db.execSQL(CREATE_CHAT_TABLE);
}
4

2 に答える 2

4

SQLiteOpenHelper.onCreate(SQLiteDatabase)は、データベースの作成時に1回だけ呼び出されます。http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.htmlを参照してください。

より良いアプローチは、「アプリケーションフレンド」テーブルを1つだけ持つことです。テーブルに、IDを格納するUserIdという列を追加します。次に、テーブルにクエリを作成するときに、UserId='2345'を含めます。例:db.rawQuery( "Select * from ApplicationFriends where userID = '2345'"、null)。これにより、id="2345"のユーザーのすべてのデータが返されます

于 2012-06-20T23:40:03.687 に答える
0

あなたがしようとしていた方法でそれを行うことができます(各ユーザーのテーブルを使用して)。onCreateテーブル作成コードをdbhelkperクラス 以外のメソッドに移動し、必要に応じて呼び出す必要があります(新しいユーザーを追加する場合)。

public void createFriendTable(String friendID) { 
    String CREATE_FRIEND_TABLE = "CREATE TABLE IF NOT EXISTS " 
            + friendID + " (" + APPLICATION_FRIENDS_KEY_ID 
            + " INTEGER PRIMARY KEY," + APPLICATION_FRIENDS_KEY_NAME 
            + " TEXT" + ")"; 
     db.execSQL(CREATE_FRIEND_TABLE); 
} 

次に、必要な場所で:

mDbHelper.createFriendTable(friendID);

これは、ユーザーの削除がはるかに簡単になるため、私が行うことです。あなたはただ彼らのテーブルを落とすでしょう。

于 2012-06-21T00:37:47.667 に答える