Articles of sqliteopenhelper

Android SQLiteException:无法将db的语言环境更改为“en_US”

我最近更新了我的一个(开源)Android应用程序,我的用户正在获得一个我无法复制的例外。 关键部分是: android.database.sqlite.SQLiteDatabaseLockedException: database is locked (code 5) 接着 Caused by: android.database.sqlite.SQLiteException: Failed to change locale for db ‘/data/data/com.airlocksoftware.hackernews/databases/hacker_news_cache.db’ to ‘en_US’. 这在Android 2.3 – 4.2.1的设备上发生,并且在我尝试连接数据库的应用程序中的多个位置发生。 我使用它后关闭数据库。 我找不到有关“无法更改db语言环境”exception的更多信息。 当我查看SQLiteConnection的源代码(第386行)时,它似乎是’android_metadata’表或’使用新的语言环境更新索引’的问题。 这是导致exception的代码(在Github上)。 java.lang.RuntimeException: An error occured while executing doInBackground() at android.support.v4.content.ModernAsyncTask$3.done(ModernAsyncTask.java:137) at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352) at java.util.concurrent.FutureTask.setException(FutureTask.java:219) at java.util.concurrent.FutureTask.run(FutureTask.java:239) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) at java.lang.Thread.run(Thread.java:856) Caused by: android.database.sqlite.SQLiteException: Failed to […]

使用Singleton设计模式正确打开/关闭数据库

我正在创建一个与数据库进行大量交互的应用程序(读写操作)。 为了避免在每个请求中打开/关闭操作,我创建了一个使用Singleton设计模式扩展SQLiteOpenHelper的类。 这样,我确信只有一个SQLiteOpenHelper实例,并且在整个应用程序生命周期(而不仅仅是活动生命周期)中只有一个与数据库的连接。 我还阅读了一些关于ContentProvider的文章,但我不确定这是一个更好的方法。 所以,这是我的Singleton类的主要逻辑( onCreate和onUpgrade已删除): public final class BaseSQLite extends SQLiteOpenHelper { private static BaseSQLite mInstance = null; private SQLiteDatabase db = null; public static BaseSQLite getInstance(Context context) { if (mInstance == null) { mInstance = new BaseSQLite(context.getApplicationContext(), DBNAME, DBVERSION); } return mInstance; } private BaseSQLite(final Context context, final String name, final int version) […]

无法将数据库从“n”版本降级为“n”到“n-1”

我有一个数据库的应用程序,使用标准的SQLiteOpenHelper创建和打开。 每当我升级数据库版本时,我也会升级应用程序的版本代码,因此数据库无法关闭(数据库版本号总是增加,永不减少)。 我通过将android:allowBackup属性设置为false来禁用我的应用程序中的数据库备份。 但是当我在Play商店升级应用程序时,我遇到了很多崩溃 无法将数据库从版本n降级到n-1 这些崩溃中有96%发生在运行的三星设备上。 任何人都知道为什么会出现这个问题,更重要的是如何防止这种崩溃? 我知道我可以覆盖onDowngrade以防止崩溃,但实际上我不明白为什么onDowngrade被调用,因为在总是使用数据库的最后版本的应用程序上调用了崩溃。 编辑 :添加代码示例,FWIW 我的OpenHelper: public class MyDBHelper extends SQLiteOpenHelper { private static final String LOG_TAG = MyDBHelper.class.getName(); public static final String DB_NAME = “my_db”; public static final int DB_V1 = 1; public static final int DB_V2_UNIQUE_IDS = 2; public static final int DB_V3_METADATAS = 3; public static final […]

SQLiteOpenHelper与ContentProvider

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

如何在android中的sqlite中批量插入

我正在使用SQLiteOpenHelper进行数据插入。 我需要插入2500个id和2500个名字,所以需要花费太多时间。 请任何人帮我如何减少插入时间。 我们可以一次插入多条记录吗? 任何人帮助我。 先谢谢你。 码: public class DatabaseHandler extends SQLiteOpenHelper { SQLiteDatabase db; private static final int DATABASE_VERSION = 8; private static final String TABLE_CITY = “CITYDETAILS”; public DatabaseHandler(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); this.mContext = context; } public void onCreate(SQLiteDatabase db) { db.execSQL(“DROP TABLE IF EXISTS ” + TABLE_CITY ); String […]

在Libgdx中使用SQLite数据库

我是Libgdx的新手,我在游戏中使用数据库时遇到了麻烦。 我搜索了一个关于如何使用Libgdx使SQLite在Android和桌面应用程序上工作的教程,但我没有find一个简单的教程。 我最后一次在Android中使用数据库时,创建了一个从SQLiteOpenHelper扩展的类。 有没有一种简单的方法来使用Libgdx做同样的事情? 或者至少,有人能指出我一步一步的教程或类似的东西吗? 编辑 我忘了说我正在寻找能够管理SQLiteOpenHelper版本的SQLiteOpenHelper 。 换句话说,当我在代码上更改我的数据库版本时,我想在apk安装上在Android中重新创建我的数据库。 解 在@42n4回答之后,我设法了如何使用Android应用程序上的SQLiteOpenHelper和桌面应用程序上的JDBC连接到SQLite数据库。 首先,我为桌面和Android应用程序创建了一个“通用类”: //General class that needs to be implemented on Android and Desktop Applications public abstract class DataBase { protected static String database_name=”recycling_separation”; protected static DataBase instance = null; protected static int version=1; //Runs a sql query like “create”. public abstract void execute(String sql); //Identical […]

资产文件夹中的数据库文件。 它会被更新吗?

我是Android SQLite的新手。 这就是我所拥有的: 我的assets文件夹中有db.sqlite 。 db的意图是READ ONLY。 用户不会写信给它。 当应用程序更新时, db.sqlite将被替换为新的数据库(我将从项目中删除旧文件并添加新文件)。 我关心的是: 旧的db文件会被删除吗? (这就是我想要的;用新的替换旧的) 为什么这么问? 因为当我调试我的应用程序时,每次更新db文件时,我都需要从设备上卸载应用程序以强制进行更新。 用户在从Play商店更新我的应用程序时是否需要执行相同的操作? 我很害怕。 这会受到我实现onCreate(SQLiteDatabase)和onUpgrade(SQLiteDatabase,int,int)的影响吗? 如果是,那么实施它们以满足我的要求的正确方法是什么? 这是我扩展SQLiteOpenHelper类的方法。 我按照我在互联网上find的教程: import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import android.content.Context; import android.database.Cursor; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteException; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; public class DataBaseHelper extends SQLiteOpenHelper{ //The Android’s default system path of your […]

没有事先close()Android的游标最终确定

在我的应用程序中,我有一个listview。 我通过SQLiteDatabase中的查询获取数据。 当我从db获取数据时,我收到此错误: 当我从第20行到第21行时发生。 我尝试将cursor.deactivate()和cursor.close()放在regel 50上。但没有结果。 任何人都知道我为什么会得到这个错误以及如何解决它? 谢谢 :)

混淆:SQLiteOpenHelper onUpgrade()如何表现? 和导入旧数据库备份一起?

假设我在SQLiteOpenHelper中有一个包含2列的数据库表test_table和相应的创建脚本: DB_VERSION = 1: public void onCreate(SQLiteDatabase db) { db.execSql(“CREATE table test_table (COL_A, COL_B); } 这是最初的应用版本1,发布在Play商店中。 过了一会儿,应用程序和使用的数据库都有更新。 我想SQLiteOpenHelper类必须像这样调整: DB_VERSION = 2: public void onCreate(SQLiteDatabase db) { db.execSql(“CREATE table test_table (COL_A, COL_B, COL_C)”); } public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSql(“ALTER TABLE test_table ADD Column COL_C”); } 一段时间后,另一个应用更新: DB_VERSION = 3: public void […]

在Android应用程序中存储用户名和密码的最佳选择

我正在开发一个应用程序,用户需要登录才能执行操作……但主要是在Android手机上使用“让我登录”……在这种情况下,我必须保持用户名和密码的值我的应用程序……应该使用首选项,还是SQLite Db,还是有其他东西,我怎样才能使它安全? Plz帮助…在此先感谢..