我的应用程序可能在同一部手机上有多个用户,我希望每个用户都拥有自己的用户 “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);
}
答案 0 :(得分:4)
SQLiteOpenHelper.onCreate(SQLiteDatabase)只在创建数据库时调用一次。请参阅http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html。
更好的方法是只有一个“应用程序朋友”表。在表中添加一个名为UserId的列,用于存储Id。然后,当您在表上写入查询时,您包含UserId ='2345'。例如:db.rawQuery(“从ApplicationFriends中选择*,其中userID ='2345'”,null)。这将返回id =“2345”
的用户的所有数据答案 1 :(得分: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);
这就是我要做的事情,因为这样可以更轻松地删除用户。你只要放下他们的桌子。