在SQLite中单击按钮时创建动态表

时间:2016-07-30 06:38:04

标签: android mysql sql database sqlite

我正在创建一个登录应用程序,我想在每个用户单击注册按钮时为其创建一个表。问题是,我使用他们唯一的电子邮件ID作为表名。后来我才知道表名不能有" @"等特殊字符。请建议我创建一个名称具有特殊字符的表格的方法,例如" @"。或者,请建议我在每个用户单击注册按钮时为每个用户创建具有唯一名称的表格。

请注意:" TABLE_NAME"在下面给出的代码中是另一个包含注册用户详细信息的表。

代码如下:

public boolean insertData(String name, String email, String mobile, String pass){
    SQLiteDatabase db = this.getWritableDatabase();
    db.execSQL("create table "+email+"(Choice TEXT, Q1 INTEGER, Q2 INTEGER, Q3 INTEGER, Q4 INTEGER, Q5 INTEGER)");
    ContentValues cv = new ContentValues();
    cv.put(NAME, name);
    cv.put(EMAIL, email);
    cv.put(MOBILE, mobile);
    cv.put(PASSWORD, pass);
    long result = db.insert(TABLE_NAME,null,cv);
    db.close();
    if(result == -1)
        return false;
    else
        return true;
}

1 个答案:

答案 0 :(得分:0)

在SQL中,标识符可以用双引号引用。标识符中的任何双引号必须加倍才能使它们脱离;在Java字符串中,双引号必须使用反斜杠进行转义:

String sqlTableName = "\"" + email.replace("\"", "\"\"") + "\"";
db.execSql("CREATE TABLE " + sqlTableName + "...");

但是,将数据放入表名是一个坏主意,因为无法像所有其他数据一样查询和修改数据。

最好使用单个表,并将该信息放入另一列:

CREATE TABLE Users(EMail TEXT, Choice TEXT, Q...);