我在这里问了一些关于SQLite的问题,也许是因为我还没有完全理解它是如何工作的。我正在阅读两本使用教程和示例的书籍,但我很难弄清楚我将如何做到这一点。
我要做的是创建列表的用户,他们点击加号按钮,输入列名称,列表视图显示他们创建的列表(列表视图插入到ArrayList中)。我想采用ArrayList并使用字符串来创建表列。
现在,我使用的示例是创建扩展SQLiteOpenHelper的类和另一个只扩展Activity并显示布局和数据的类。
我的问题是:
什么调用扩展SQLiteOpenHelper的类来创建数据库?这是从启动应用程序自动运行的吗?或者我在活动中称呼它?
我计划在FOR循环中使用ArrayList构建一个长字符串,这样我就可以为其列创建CREATE TABLE字符串。我如何将ArrayList带到SQLite类?我正在考虑使用捆绑的Intent,但我不确定这是否会起作用(或者它会吗?)。
答案 0 :(得分:2)
实现SQLiteOpenHelper“提供”两种主要方法供您覆盖:onCreate和onUpgrade。 onCreate将在您第一次创建帮助程序实例时自动调用,并且仅在数据库尚不存在时才会自动调用。它位于onCreate中,您可以在其中执行create语句。
然后,您可以使用此帮助程序对象来获取数据库的实例,可以是可读的也可以是可写的,具体取决于您的需求:getWritableDatabase
和getReadableDatabase
。这些方法返回一个Database对象,您可以在其上执行查询。
从这里开始,您可以将帮助程序包装在超类中,或者只是将查询/插入/删除/更新方法添加到帮助程序中。这些将采用可读或可写的实例,例如,插入您尝试添加的任何内容的列表。此处不需要意图,您将直接获得Helper / Wrapper实例并在那里执行操作。
编辑 - 如何将arraylist传递给您的SQLiteOpenHelper:
class DatabaseHelper extends SQLiteOpenHelper {
List columns;
public AccountsDatabaseHelper(Context context, List columns) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
this.columns = columns;
}
...
}
活动中的代码:
...
DatabaseHelper helper = new DatabaseHelper(this, myArrayList);
helper.getWriteableDatabase(); //This will execute the onCreate
...