Android SQLite问题

Android SQLite问题,android,sqlite,Android,Sqlite,我在这里问了一些关于SQLite的问题,可能是因为我不完全理解它是如何工作的。我正在读两本使用教程和示例的书,但我很难弄清楚我将如何做到这一点 我要做的是用户创建一个列表,他们点击加号按钮,输入列名,列表视图显示他们创建的列表(列表视图插入ArrayList)。我想获取该ArrayList并使用字符串创建表列 现在,我使用的示例是创建扩展SQLiteOpenHelper的类和另一个扩展Activity并显示布局和数据的类 我的问题是: 什么调用扩展SQLiteOpenHelper以创建数据库的类

我在这里问了一些关于SQLite的问题,可能是因为我不完全理解它是如何工作的。我正在读两本使用教程和示例的书,但我很难弄清楚我将如何做到这一点

我要做的是用户创建一个列表,他们点击加号按钮,输入列名,列表视图显示他们创建的列表(列表视图插入ArrayList)。我想获取该ArrayList并使用字符串创建表列

现在,我使用的示例是创建扩展SQLiteOpenHelper的类和另一个扩展Activity并显示布局和数据的类

我的问题是:

  • 什么调用扩展SQLiteOpenHelper以创建数据库的类?是否从启动应用程序开始自动运行?还是在我的活动中称之为

  • 我计划在FOR循环中使用ArrayList构建一个长字符串,以便为其列创建create表字符串。如何将ArrayList带到SQLite类?我曾考虑使用捆绑的意图,但我不确定这是否可行(或者是否可行?)

  • 实现SQLiteOpenHelper“提供”了两种主要的重写方法:onCreate和onUpgrade。第一次创建帮助器实例时,仅当数据库尚不存在时,才会自动调用onCreate。它在onCreate中执行create语句

    然后,您可以使用这个helper对象来获取数据库实例,可以是可读的,也可以是可写的,具体取决于您需要什么:
    getwriteabledatabase
    getReadableDatabase
    。这些方法返回一个数据库对象,您可以在该对象上执行查询

  • 从这里,您可以将帮助程序包装在一个超类中,也可以将查询/插入/删除/更新方法添加到帮助程序中。它们将获取一个可读或可写的实例,并插入您试图添加的任何内容的列表。这里不需要意图,您将直接获取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
      ...      
    

    问:我可以创建一个数据库,并在常规活动中创建数据库表吗?对于#2,我不确定我的问题措辞是否正确。。。ArrayList保存表列的名称。因此,当用户点击GO时,应用程序将遍历数组列表并使用其字符串创建表列。这是用户要做的第一件事吗?您可以将该arraylist作为参数传递给SQLiteOpenHelper的构造函数,将其存储在实例变量中,并在onCreate中使用它。@dmon:是的,用户在继续创建SQL表之前先填充arraylist。现在我才发现这个,但还没有测试过。我可以在一个活动类中编写一个完整的SQL类吗?你可以把类放在任何你想要的地方,但我不明白你为什么想要/需要这样做。这样做不会使它成为活动的“一部分”,因此您将获得很少的收益。。。我是否会在主活动中放置类似的内容(SQLclass将是扩展SQLiteOpenHelper的新类):SQLclass sqlc=newsqlclass();onCreate(ArrayListVariable);(ArrayList变量是ArrayList名称)?