0

我的应用程序在同一部手机上可能有多个用户,我希望每个用户都有自己的“ApplicationFriends”mysqlite 表。当表的名称只有“ApplicationFriends”时,一切正常。但是当我尝试设置像这样的“ApplicationFriends2345”表名时,当 2345 是唯一的用户编号时,我在尝试运行选择查询时总是收到错误,说该表不存在。

这是我的表创建代码:

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) 仅在创建数据库时调用一次。请参阅http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html

更好的方法是只有一个“应用程序朋友”表。在表中添加一个名为 UserId 的列,用于存储 Id。然后,当您在表上编写查询时,您将包含 UserId = '2345'。例如: db.rawQuery("Select * from ApplicationFriends where userID = '2345'",null) 。这将返回 id = "2345" 的用户的所有数据

于 2012-06-20T23:40:03.687 回答
0

您可以按照您尝试的方式进行操作(每个用户都有一个表格)。您只需将表创建代码移动到 dbhelkper 类中的方法以外的方法onCreate中,然后根据需要调用它(当您添加新用户时)。

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 回答