【发布时间】:2013-04-25 17:57:21
【问题描述】:
我在 Android 上编写应用程序并使用 SQlite 数据库。 我希望能够通过用户选择将列添加到我的表中。 因此用户可以将他想要的任何列添加到表中。例如,用户有“动物”表,他想为“狗”、“猫”和“鱼”添加列。
我已经阅读了一些解决方案,但没有看到可以帮助我的解决方案。 我读到添加列的简单方法是使用:
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// If you need to add a column
if (newVersion > oldVersion) {
db.execSQL("ALTER TABLE " + TableName + " ADD COLUMN " + ColumnName);
}
}
但是我的问题是我无法选择将由用户选择添加到表中的列的名称是什么,字符串没有参数。 所以我尝试使用这样的东西,并直接调用它。
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion, String newColumnName) {
// If you need to add a column
if (newVersion > oldVersion) {
db.execSQL("ALTER TABLE " + TableName + " ADD COLUMN " + newColumnName);
}
}
但是我得到了这个方法的错误。
我还有一个关于数据库版本的问题。 调用 onCreate 时会自动调用 onUpgrade 方法。 在 onUpgrade 中有用于数据库版本的 oldVersion 和 newVersion 参数。什么时候设置 oldVersion 和 newVersion 参数?我如何将我的 newVersion 参数设置为 2,3,4...?
【问题讨论】:
-
听起来像是糟糕的数据库设计。你确定你不能使用关系来达到同样的目的吗?
-
@Gustek 谢谢你的回答。你是什么意思关系?开更多桌?但后来我有同样的问题。因为我的桌号仅限于我最初设置的数量。如果我的用户想添加“鸟”表,我没有可以做到的方法。
-
为什么它必须是列,而不是另一个表中的行和多对多关系?您尝试存储的数据结构是什么?
-
我正在尝试做购物清单日志。因此用户可以添加他想要的任何项目,并且该项目将作为新列添加到表中。如果不正确放入新表,当用户按“添加项目”或类似的东西时,我怎么能这样做,将创建一个新表。
-
添加新行而不是列。