android sqlite表名

时间:2012-06-20 23:19:26

标签: android sqlite

我的应用程序可能在同一部手机上有多个用户,我希望每个用户都拥有自己的用户 “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);
}

2 个答案:

答案 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);

这就是我要做的事情,因为这样可以更轻松地删除用户。你只要放下他们的桌子。