Articles of sqliteopenhelper

SQLiteOpenHelper同步

所以我想出了一些想法,我想知道它是否可以实现。 假设我有多个表(数据库模型),每个表都由某个类表示。我不会使用单一模式和open helper,所以我创建了一个简单的类来提供数据库的单个实例。我我的想法是,只要所有表都引用SQLiteDatabase(由open helper返回),它们都将使用相同的数据库实例,并且可能不需要将工作与数据库同步,因为open helper执行此操作。当最后一个表完成它的工作GC将收集打开的帮助器(因为最后一个引用将是弱引用) – > finalize()被调用,我在此方法期间关闭数据库以防止来自操作系统的任何警告。 我的问题是:这可以工作吗?它会自动关闭数据库,它会泄漏还是抛出一些exception? 这是我的class级: public class DatabaseHelper { private static WeakReference sDBOpenHelper; private void notifyDBCreate(SQLiteDatabase db) { for (DBTable table : mTables) { table.onDBCreate(db); } } private void notifyDBUpgrade(SQLiteDatabase db) { for (DBTable table : mTables) { table.onDBUpgrade(db); } } public SQLiteDatabase getDatabase(boolean readOnly) { SomeCustomOpenHelper dbHelper = sDBOpenHelper.get(); […]

在SQLiteOpenHelper中使用onCreate获取上下文

在我的Android应用程序中:如何在SQLiteOpenHelper的onCreate方法中访问Context?

Android AsyncTask和SQLite数据库实例

我有一个问题,我不知道如何处理它。 我的应用程序中的一个活动有多个AsyncTask ,可以访问单个SQLiteOpenHelper 。 我在onCreate()初始化并打开帮助器,我在onStop()关闭它。 我还检查它是否已在onResume()初始化。 由于我已经发布了我的应用程序,我在doInBackground中收到了Null Exception的错误数,我尝试访问数据库帮助程序。 我知道这是因为在调用doInBackground之前关闭了DB( onStop() ),这是公平的。 我的问题是,我应该在哪里关闭数据库连接? 在Activity中使用DB帮助程序的单个实例并从多个线程( AsyncTasks )访问它是否正确? 或者我应该为每个AsyncTask使用单独的DB帮助程序实例? 这是我活动的简化骨架: public class MyActivity extends Activity{ private DbHelper mDbHelper; private ArrayList objects; @Override public void onStop(){ super.onStop(); if(mDbHelper != null){ mDbHelper.close(); mDbHelper = null; } } @Override public void onResume(){ super.onResume(); if(mDbHelper == null){ mDbHelper = new DbHelper(this); mDbHelper.open(); […]

为什么我不能在没有运行时错误的情况下使用Resources.getSystem()?

public class BobDatabase extends SQLiteOpenHelper{ private static final String DATABASE_NAME = “bob.db”; private static final int DATABASE_VERSION = 1; public static final String DEFAULT_PROFILE = “default_profile”; public BobDatabase(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase database) { createProfileTable(database); createTimeTable(database); createEventTable(database); createLocationTable(database); } /** * Creates a table for Profile objects, executes […]

将JSON数据插入到android中的SQLite数据库中

我想将JSON数组中的数据插入到SQLite数据库中。 我创建了两个类CategoryHelper.java和AndroidJSONParsingActivity.java来获取java响应。 当我运行代码时,在databaseHelper.saveCategoryRecord(id,name);得到了exceptiondatabaseHelper.saveCategoryRecord(id,name); 我的API工作正常并向我提供数据。 我的代码如下: CategoryHelper.java package com.androidhive.jsonparsing; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class CategoryHelper { private static final int DATABASE_VERSION = 2; private static final String DATABASE_NAME = “category.db”; private static final String TABLE_NAME = “tbcategory”; public static final String CATEGORY_COLUMN_ID = “_id”; public static final String CATEGORY_COLUMN_NAME […]

Android中SQLite的默认线程模式是什么?

http://www.sqlite.org/threadsafe.html 从上面的链接我开始知道,SQLite支持三种不同的线程模式:单线程,multithreading和序列化。 我很想知道“Android中SQLite的默认线程模式是什么”? 有没有办法以务实的方式改变线程模式? 如果是这样,我得到的优势如何? 什么时候选择哪一个样本案例? 提前致谢。

SQLite连接对象泄露 – Android

我正在制作我的第一个Android应用程序,我首先学习了一些sqlite教程,这教我使用扩展SQLiteOpenHelper的databaseHelper。 所以我的databaseHelper确实扩展了SQLiteOpenHelper。 我在Logcat中得到一个sqlite连接泄漏警告,所以想要了解如何解决这个问题。 我收到此错误: 02-01 21:39:50.740: W/SQLiteConnectionPool(32061): A SQLiteConnection object for database ‘/data/data/com.btf271.fashionassistant/databases/clothingManager’ was leaked! Please fix your application to end transactions in progress properly and to close the database when it is no longer needed. 我的databaseHelper函数在发生泄漏时被调用: public List getObjectsByGenderAndCategory(String gender, String category) { List objects = new ArrayList(); String selectQuery = String.format( “SELECT * […]

Android获取数据库磁盘映像格式错误(代码11)错误

在我的应用程序中,我得到这个数据库磁盘映像是一些用户的格式错误(代码11)错误。 我搜索了它并且知道当db映像格式错误时,Android会删除它并重新创建一个新的db文件,这对某些用户来说正在发生。 这里的问题是10个用户中的我得到这个错误,db只为2-3个用户重新创建,我无法在logcat中得到错误,为什么会发生这种情况。 如果db对10个用户的格式错误,那么为什么它不为所有10个用户重新创建数据库仅为2-3个用户? 有人能指出我正确的方向如何处理它? 更新:我仍然无法重现该问题,但我能够得到一些日志,他们在这里 08-28 08:35:44.847 E/SQLiteLog(15123): (11) database corruption at line 65088 of [00bb9c9ce4] 08-28 08:35:44.847 E/SQLiteLog(15123): (11) statement aborts at 67 08-28 08:35:44.857 E/DefaultDatabaseErrorHandler(15123): Corruption reported by sqlite on database: /data/data/com.grofers.retail.posmaster/databases/GrofersRetail 08-28 08:35:45.377 D/dalvikvm(15123): GC_EXPLICIT freed 2639K, 62% free 7479K/19228K, paused 4ms+8ms, total 82ms 08-28 08:35:45.727 E/DefaultDatabaseErrorHandler(15123): !@ Delete old .mark […]

Robolectric:运行多个测试失败

我正在尝试使用SQLite(OpenHelper)作为数据库,使用Robolectric 3.0 + Gradle运行多个测试。 运行每个单独的测试工作正常,但启动整个测试套件总是在第二次测试中导致RuntimeException。 这是我的测试假人,不起作用。 @RunWith(RobolectricGradleTestRunner.class) @Config(constants = BuildConfig.class, sdk = 21) public class Dummy { @Before public void setUp() throws Exception { // setup activity … } @Test public void testA() throws Exception { Assert.assertTrue(true); } @Test public void testB() { Assert.assertTrue(true); } } 例外 java.lang.RuntimeException: java.lang.IllegalStateException: Illegal connection pointer 1. Current pointers […]

备份室数据库

我正在尝试以编程方式备份​​房间数据库。 为此,我只是复制包含整个数据库的.sqlite文件 但是,在复制之前,由于房间已启用写入日志记录 ,我们必须关闭数据库,以便-shm文件和-wal文件合并为单个.sqlite文件。 正如这里指出的那样 我在RoomDatabase对象上运行.close() : 一切正常,备份,但是,稍后,当我尝试执行INSERT查询时,我收到此错误: android.database.sqlite.SQLiteException: no such table: room_table_modification_log (code 1) 关闭后如何才能正确地重新打开房间数据库? PS: .isOpen()对象上的.isOpen()在INSERT之前返回true 房间版: 1.1.1-rc1