【问题标题】:Dynamic table creation on button click in SQLite在 SQLite 中单击按钮时创建动态表
【发布时间】:2016-12-04 21:30:54
【问题描述】:

我正在创建一个登录应用程序,我想在每个用户单击注册按钮时为他们创建一个表。问题是,我使用他们唯一的电子邮件 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;
}

【问题讨论】:

    标签: android mysql sql database sqlite


    【解决方案1】:

    在 SQL 中,标识符可以用双引号引起来。标识符内的任何双引号都必须加倍以将它们转义;在 Java 字符串中,双引号必须用反斜杠转义:

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

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

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

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

    【讨论】:

    • 这行代码实际上做了什么? String sqlTableName = "\"" + email.replace("\"", "\"\"") + "\""; 我真的跟不上。
    • 这是基本的 Java,我解释了为什么需要它。如果您不了解其中的特定操作,请提出一个新问题。
    猜你喜欢
    • 2018-06-17
    • 1970-01-01
    • 1970-01-01
    • 2020-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-30
    相关资源
    最近更新 更多