Articles of sqliteopenhelper

困惑于SQLiteOpenHelper和创build多个表

我觉得Android开发人员有关在SQLite中保存数据的指导方针真的很缺乏。 当我涉及到多个表格的时候,我对这个一般性的指南是什么感到困惑。 我目前有两个经理向用户界面公开(CRUD)两个不同的实体集。 我是否: 在每个pipe理器中创build一个私有类SQLiteOpenHelper。 每个助手将有自己的onCreate自己的表? 要么 创build一个公共类SQLiteOpenHelper创buildTABLE的? 我没有看到任何明显的优势,使用上面的一个,但我看到他们两个正在使用。 Android对此有何评论?

Android Studio中的“android.database.sqlite.SQLitepenhelper”中没有可用的默认构造函数

尝试扩展类与SQLiteOpenHelper,但是这个错误显示:“没有默认构造函数在android.database.sqlite.SQLitepenhelper”与其他“无法parsing符号类别,注意,…” class DbHelper extends SQLiteOpenHelper { @Override public void onCreate(SQLiteDatabase db) { db.execSQL(Category.getSql()); db.execSQL(Note.getSql()); db.execSQL(Attachment.getSql()); db.execSQL(CheckItem.getSql()); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS " + Category.TABLE_NAME); db.execSQL("DROP TABLE IF EXISTS " + Note.TABLE_NAME); db.execSQL("DROP TABLE IF EXISTS " + Attachment.TABLE_NAME); db.execSQL("DROP TABLE IF EXISTS " + CheckItem.TABLE_NAME); […]

为什么我们需要onUpgrade(); 方法在SQLiteOpenHelper类中

我遵循这个教程。 http://www.androidhive.info/2011/11/android-sqlite-database-tutorial/ 任何机构可以让我清除这个代码块。 // Creating Tables @Override public void onCreate(SQLiteDatabase db) { String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "(" + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT," + KEY_PH_NO + " TEXT" + ")"; db.execSQL(CREATE_CONTACTS_TABLE); } // Upgrading database @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) […]

SQLiteOpenHelper同步

所以我想出了一些想法,我想知道它是否可以实现。 比方说,我有多个表(数据库模型),每个表都由一些类来表示。我不会用开放的帮助器来使用单例模式,所以我创build了一些简单的类来提供单个数据库实例。我的的想法是,只要所有的表持有对SQLiteDatabase的引用(由开放的帮助器返回),他们都将使用相同的数据库实例,可能不需要同步工作与数据库,因为打开帮助器这样做。最后一个表完成它的工作GC将收集打开帮助(因为最后一个引用将是弱引用) – >调用finalize(),并在此方法中closures数据库,以防止从操作系统的任何警告。 我的问题是:这是否可以工作?它会自动closures数据库,将泄漏或抛出一些exception? 这是我的class级: public class DatabaseHelper { private static WeakReference<SomeCustomOpenHelper> 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(); if (dbHelper == null) […]

在SQLiteOpenHelper的onCreate中获取上下文

在我的android应用程序:我怎样才能访问上下文SQLiteOpenHelper的onCreate方法?

Android AsyncTask和SQLite数据库实例

我有一个问题,我不知道如何处理它。 我的应用程序中的一个活动有多个访问单个SQLiteOpenHelper AsyncTask 。 我在onCreate()初始化并打开助手,然后在onStop()closures它。 我也检查它是否已经在onResume()初始化。 由于我已经发布我的应用程序,我收到了一些错误,在doInBackground中尝试访问DB助手的空exception。 我知道这是因为在调用doInBackground之前closures了数据库( onStop() ),这足够公平了。 我的问题是,我应该在哪里closures数据库连接? 在活动中使用DB助手的单个实例并从多个线程( AsyncTasks )访问它是正确的吗? 或者我应该为每个AsyncTask使用单独的数据库帮助器实例? 这是我的活动的简化框架: public class MyActivity extends Activity{ private DbHelper mDbHelper; private ArrayList<ExampleObject> 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(); } […]

SQLite连接对象泄露 – Android

我正在制作我的第一个android应用程序,而且我首先学习了一些sqlite教程,这教会了我使用扩展SQLiteOpenHelper的databaseHelper。 所以我的databaseHelper扩展SQLiteOpenHelper。 我在Logcat中得到了一个sqlite连接泄漏警告,因此需要一些关于如何解决这个问题的build议。 我得到这个错误: 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<Sticker> getObjectsByGenderAndCategory(String gender, String category) { List<Sticker> objects = new ArrayList<Object>(); String selectQuery = String.format( "SELECT * […]

并发写入android数据库(从多个服务)?

我有一个严重的问题与Android的SQLite数据库和并发写作。 为了更好的解释,我会给你一个真实的例子: 我有一个桌面小部件,在那里我展示了我的数据库中的项目列表(在后台我有DataService,它定期从远程服务器收集新鲜数据,并用它们更新我的数据库)。 所以 – 当我点击列表中的某个项目时,我需要在数据库中更新单击的项目(=执行写入操作)。 但是当我点击的项目正好在瞬间,当DataService正在更新我的数据库中的新鲜数据,当然logging这样的错误: android.database.sqlite.SQLiteException: error code 5: database is locked 通常很难模拟,但是如果你安排DataService每10秒运行一次(仅仅为了演示),你可以很容易地模拟这个错误。 而我的问题是,如何处理呢? 我在文档中读到,如果在同一时间有两个写事件,只有第一个会被执行,第二个会被logging为错误。 这听起来很奇怪,必须有另外的select,例如第二次写入就要等到第一次写入完成。 或者也许还有其他解 试图阅读文档,但似乎,这个项目是不是很好的涵盖在谷歌文档…几乎每一个信息,我发现在官方网页以外。 PS:这是我的DBHelper类的缩短版本: public class DBHelper extends SQLiteOpenHelper { private static final String TABLE_NEWS = "News"; private static final String COL_ID = "id"; private static final String COL_TITLE = "title"; private static final String COL_ALERT = "alert"; […]

SQLiteOpenHelper – 数据库是如何创build的?

我正在做一个数据库应用程序,我的程序工作,我已经了解了我一直遵循的大部分教程。 但是,我还不清楚一个方面。 有一个扩展SQLiteOpenHelper的MyDBHelper内部类。 外部variables包括名为d的SQLiteDatabase。 MyDBHelper的代码是: private static class MyDBHelper extends SQLiteOpenHelper { MyDBHelper(Context c) { super(c, DB_NAME, null, DB_VERSION); } @Override public void onCreate(SQLiteDatabase db) { try { db.execSQL(DATABASE_CREATE); } catch (SQLException e) { e.printStackTrace(); } } @Override public void onUpgrade(SQLiteDatabase db, int oldVers, int newVers) { Log.w(TAG, "Upgrading database from version " + oldVers […]

SQLiteOpenHelper与ContentProvider

我是Android开发的新手。 我试图创build一个应用程序,从内部数据库(SQLite)读取并列出列表中的所有数据(我使用listView )。 到目前为止,我得到了一个名为DatabaseHandler的类,它扩展了SQLiteOpenHelper ,并执行所有数据库操作(select数据,插入数据,删除数据…)。 但现在我想列出值,我正在阅读一些网站,我不得不使用一个Loader而不是Cursor ,因此一个ContentProvider 。 到目前为止,我明白ContentProvider提供了对数据库的受控访问。 我的问题是: ContentProvider是否与SQLiteOpenHelper ? 另外,我正在使用API​​级别8, ContentProvider仅在API级别11上可用。解决此问题的最佳方法是什么? 提前致谢。