【问题标题】:Access database from background service从后台服务访问数据库
【发布时间】:2013-02-09 10:32:41
【问题描述】:

我想从 SERVICE 中的 SQLiteDatabse 访问数据。我创建了对象 db 并尝试从服务访问数据库,但它不起作用。要访问服务的onStart 方法中的数据库内容,我应该怎么做。我搜索了很多,但通过 getApplicationContext() 方法创建上下文对我不起作用。请帮助我提供访问服务中数据库的代码。

【问题讨论】:

  • db.isOpen() 等函数运行良好。但是,当我使用 db.rawQuery() 触发选择查询时,它不起作用。请帮我检索服务中的值。
  • 谢谢各位朋友。我成功解决了这个问题。非常感谢您的帮助。
  • 现在我遇到了另一个问题。我尝试使用 rawQuery() 以及 db.update() 和内容值触发更新查询,但它仍然无法正常工作。有没有其他方法可以更新服务中的表?谢谢

标签: android android-sqlite android-context sqliteopenhelper


【解决方案1】:

Android Service 没有这种方法onStart()。您可以使用onStartCommand()onCreate()

【讨论】:

  • 对不起,这是一个错误。但是你能告诉我如何从服务中检索值/更新数据库的值吗?
  • SQLiteDatabase db = (new Storage(getBaseContext()).getReadableDatabase(); db = (new Storage(getBaseContext()).getWritableDatabase();
  • storage 是我的数据库类,它扩展了 SQLiteOpenHelper。我正在创建如上所示的对象 db 并将其用作 db.rawQuery(qry);
  • 简而言之,我正在尝试像在 ACTIVITY 中一样访问 SEVICE 中的数据库。
  • 是的,我什至也尝试过 getApplicationContext()。但是,没有用。
【解决方案2】:

你必须选择,你能做什么。

第一个选项如下:


您始终使用静态上下文(例如 mainactivity),您始终可以通过该上下文访问数据库。你可以这样做:

public static Activity thi;

第二个选项如下:


在您的服务中,您可以调用:

this.getApplicationContext();

有了这个上下文,你也可以写入你的数据库。

最好的问候

野生动物园

【讨论】:

  • 我试过这样: db = (new Storage(this.getApplicationContext()).getReadableDatabase(); 和 getWritableDatabase() 一样,但是在使用 rawquery() 触发选择查询后不会检索数据。
  • 你能告诉我更多关于你上面写的静态上下文的信息吗?我不明白。我应该在 SERVICE 中使用这个静态上下文吗?
  • 你可以使用它,但你不必喜欢这个你做跟随。首先你实例化它。 thi.getApplicationContext();它应该可以正常工作。 ;)
  • 我试过这样:private static Activity m; db=(new Storage(m.getApplicationContext())).getReadableDatabase(); db=(new Storage(m.getApplicationContext())).getWritableDatabase(); db.rawQuery(qry,null);它没有用。是这样吗?
  • 谁能告诉我我在上面的代码中犯了什么错误?
猜你喜欢
  • 2013-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-26
  • 1970-01-01
相关资源
最近更新 更多