Android数据库:动态表名创建

时间:2012-03-30 18:55:50

标签: android database sqlite

是否可以从用户输入创建数据库表名。我看到的所有教程都在应用程序实际运行之前预先创建了表名。理想情况下,我想将一个String传递给onCreate方法(首先调用它来创建数据库表)并使用该字符串作为表名。这可能吗?

3 个答案:

答案 0 :(得分:1)

我不使用它来创建第一个表,但这是我用来创建新表的方法。第一个表大多是空的,我从列表视图列表中删除它。 loc是我传入的字符串。我正在将它切换到ContentProvider但是

public long addTable(String loc) {
    // TODO Auto-generated method stub
    ourDatabase.execSQL("CREATE TABLE IF NOT EXISTS " + loc + " ("
            + KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_2TBL
            + " TEXT NOT NULL, " + KEY_ONE + " TEXT NOT NULL, "
            + KEY_TWO + " TEXT NOT NULL);");
    ContentValues cv = new ContentValues();
    cv.put(KEY_2TBL, loc);
    return ourDatabase.insert(loc, null, cv);

}

答案 1 :(得分:0)

当您创建Object of DatbaseClass时,将创建数据库。

您可以在获得字符串名称时创建对象。

然后你可以把它传递给Bill Gary在他的答案中完成的功能。

答案 2 :(得分:0)

您将无法使用onCreate()方法创建第二个表。因为只有在创建数据库时才会调用它。您将无法插入任何String As Argument。您可以创建一个新方法来执行此操作。

方法可能看起来像这样,

    public void AddDesiredTable(String TableNmae){
    /*At first you will need a Database object.Lets create it.*/
    SQLiteDatabase ourDatabase=this.getWritableDatabase();

    /*then call 'execSQL()' on it. Don't forget about using TableName Variable as tablename.*/
    ourDatabase.execSQL("CREATE TABLE IF NOT EXISTS " + TableNmae+ " ("
        + KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_2TBL
        + " TEXT NOT NULL, " + KEY_ONE + " TEXT NOT NULL, "
        + KEY_TWO + " TEXT NOT NULL);")
    }