2013-04-04 76 views
14

我在Android上搜索有关SQLite的信息,并阅读了一些关于Android编程的书籍的一些章节,但我不知道如何真正在Android上使用SQLite。在Android上正确使用Sqlite(SQLiteOpenHelper,连接,主线程等...)

我正在开发一个具有Activities,Services和BroadcastReceivers的应用程序,并且它们都必须读取和写入数据库中的数据。所以我有一些问题:

  • 哪里是创建SQLiteOpenHelper实例的最佳位置?我读过这个,看来最好的方法是只有SQLiteOpenHelper所有的应用程序。
  • 何时以及何地需要通过调用dbHelper.getReadableDatabase()(或​​)得到SQLiteDatabase对象?我需要在每个查询上完成它,每次查询后关闭它?
  • 我读过,我不应该在主线程中执行数据库操作,所以我为每个数据库操作创建一个异步任务,我在一个Activity中执行,这是最好的方法吗?
+0

感谢您的反对票¬¬ – 2013-04-04 10:48:46

+2

创建SQLiteOpenHelper实例的最佳位置在'ContentProvider'的'onCreate'方法中......使用'getWritableDatabase()'的最佳位置在'delete' /''在'query'中插入'ContentProvider'和'getReadableDatabase()'的''''update'方法......你不需要关闭这些数据库......为了避免在UI上使用数据库操作,你可以使用'Loaders'与CP ...我知道,写CP是痛苦的**,但与写得很好的CP你避免了很多问题(如从多个theread访问数据库) – Selvin 2013-04-04 10:50:30

+0

谢谢Selvin。我想在不使用ContentProvider的情况下使用SQLite,因为我不需要与其他应用程序共享任何数据。我认为我不需要我的应用程序中的内容提供者:http://touchlabblog.tumblr.com/post/32793099735/training-sqlite#_=_。如果不使用ContentProvider,没有办法正确使用SQLite吗? – 2013-04-04 10:55:32

回答

7

开始对大部分的问题是相当主观的。但让我试试吧

哪里是创建SQLiteOpenHelper实例的最佳位置?我对 赞成这一点,似乎最好的办法是只有 SQLiteOpenHelper所有的应用程序。

你可以在你的项目扩展SQLiteOpenHelper创建一个类。当您在应用程序中访问多个Activities中的相同数据库时,这会很有帮助。

,时间和地点,我需要通过调用 dbHelper.getReadableDatabase(得到SQLiteDatabase对象)(或getWritableDatabase)?我需要对每个查询执行 ,每次查询后关闭它?

这将在类,它扩展SQLiteOpenHelper来完成。例如:(这是从在该交的端部设置的Vogella物品的摘录)

public void open() throws SQLException { 
    database = dbHelper.getWritableDatabase(); 
} 

并且在一个活动将使用类别:

CommentsDataSource datasource = new CommentsDataSource(this); 
datasource.open(); 

而一个CursorDatabase连接当您完成Database的读取,修改,添加等操作时,应该关闭Activity

当您阅读稍后链接的网页时,上面的代码将有意义。

我readed,我应该不会做数据库操作的主要 线程,所以我创建的每个数据库操作我在做活动的 异步任务,这是最好的办法吗?

理想情况下,是的。我个人建议使用Asynctask,特别是当你要处理大型记录集时。

最后,我建议你阅读Lars Vogella的本教程:http://www.vogella.com/articles/AndroidSQLite/article.html。它将解决您的大部分疑虑和疑问。祝你好运。 :-)

+0

谢谢IceMAN!你的回答和Vogella的文章帮助了我很多! – 2013-04-04 11:20:06

+0

@SergioViudes:不客气。他还有其他很好的教程,我觉得非常有帮助。我相信你也会。 :-) – 2013-04-04 11:22:26

0

1.创建SQLiteOpenHelper实例的最佳位置是哪里?

SQLiteOpenHelper可以帮助您连接使用它定义的表。因此,您可以在一个SQLiteOpenHelper类中定义所有表。

2.什么时候需要通过调用dbHelper.getReadableDatabase()(或getWritableDatabase)来获取SQLiteDatabase对象?

每当你想要写在定义表中的数据,您将需要调用getWritableDatabase,并从他们阅读你将需要getReadableDatabase

您可以CRUD(创建,检索,更新,删除)用于这些目的的功能。

3. 不要在主线程中做数据库操作!

我不确定这件事。

以及这里有一个链接,你与SQLite- http://www.androidhive.info/2011/11/android-sqlite-database-tutorial/

+0

感谢您的回答。关于SQLiteOpenHelper,我知道它是什么,事实上,我做到了,我的应用程序正在使用我的SQLite数据库,但是我需要创建多个SQLiteOpenHelper,因为只使用一个从不同的线程访问数据库,导致我的应用程序失败。我认为我应该只创建1个(http://touchlabblog.tumblr。com/post/32793099735/training-sqlite#_ = _),所以我不需要如何处理它。 关于getReadableDatabase/getWritableDatabase,我喜欢你的教程:打开连接 - >查询 - >关闭连接。 – 2013-04-04 11:02:13

相关问题