Android 2.X 和 3.X 上的 SQLiteOpenHelper 问题

2024-04-26

所以我犯了一个很大的错误,在 android 4.0+ 上测试我的代码,并认为它在其他版本上也能正常工作。但我在使用 SQLiteOpenHelper 时遇到 2.X 和 3.X 的问题。

首先是代码:

 public class HelperDB extends SQLiteOpenHelper implements BaseColumns {

 public static final int DATABASE_VERSION = 2;
 public static final String DATABASE_NAME = "MYDB.db";
 public static final String TABLE_NAME = "MYtable";
 public static final String TABLE_NAME_LOGO = "MYLogos";
 public static final String COLUMN_NAME_1 = "xxxxx";
 public static final String COLUMN_NAME_2 = "yyyy";
 public static final String COLUMN_NAME_3 = "zzzz";
 public static final String COLUMN_NAME_4 = "aaaa";
 public static final String COLUMN_NAME_LOGO = "logo";
 public static final String COLUMN_NAME_5 = "3333";
 public static final String COLUMN_NAME_6 = "fffff";
 public static final String COLUMN_NAME_7= "Abc";

public HelperDB(Context context)
{
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

@Override
 public void onCreate(SQLiteDatabase db){

    db.execSQL("CREATE TABLE " + TABLE_NAME + "(" + _ID + " INTEGER PRIMARY KEY autoincrement," + COLUMN_NAME_1 + " TEXT not null," + COLUMN_NAME_2
            + " TEXT not null," + COLUMN_NAME_3 + " TEXT not null," + COLUMN_NAME_4 + " LONG not null," + COLUMN_NAME_5 + " INT DEFAULT 99," + COLUMN_NAME_6 +" INT DEFAULT 99);");


    db.execSQL("CREATE TABLE " + TABLE_NAME_LOGO + "(" + _ID + " INTEGER PRIMARY KEY autoincrement," + COLUMN_NAME_6 + " TEXT not null,"  +  COLUMN_NAME_7 + " INTERGET not null);");

}

      @Override
   public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}

 }
******************************************************************************

  public class MatchesDB {

private HelperDB dbHelper;  
private SQLiteDatabase dbw, dbr; 
public static int id;

public MatchesDB(Context context){  

    dbHelper = new HelperDB(context); 
    dbw = dbHelper.getWritableDatabase();
    dbr = dbHelper.getReadableDatabase();
}

public void fillinfotable(){}
And all other functions to query the database and delete etc

通过调用创建数据库

      MatchesDB newdb = new MatchesDB(context);
  newdb.fillinfotable();

所有这一切在所有 4.0+ 设备上都能完美运行。但是,当我尝试在 2.x 设备上运行时,出现以下错误

07-14 21:29:14.890: E/Database(22231): CREATE TABLE android_metadata failed
07-14 21:29:14.898: E/Database(22231): CREATE TABLE android_metadata failed
07-14 21:29:15.640: E/Database(22231): Failed to setLocale() when constructing, closing      the database
07-14 21:29:15.640: E/Database(22231): android.database.sqlite.SQLiteException:  database is locked
07-14 21:29:15.640: E/Database(22231):  at android.database.sqlite.SQLiteDatabase.native_setLocale(Native Method)
07-14 21:29:15.640: E/Database(22231):  at   android.database.sqlite.SQLiteDatabase.setLocale(SQLiteDatabase.java:2000)
07-14 21:29:15.640: E/Database(22231):  at android.database.sqlite.SQLiteDatabase. <init>(SQLiteDatabase.java:1857)
07-14 21:29:15.640: E/Database(22231):  at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:822)
07-14 21:29:15.640: E/Database(22231):  at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:856)
07-14 21:29:15.640: E/Database(22231):  at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:849)
07-14 21:29:15.640: E/Database(22231):  at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:556)
07-14 21:29:15.640: E/Database(22231):  at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203)
07-14 21:29:15.640: E/Database(22231):  at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:118)

非常感谢任何帮助!真的想要一个快速修复,因为该应用程序已经在 Play 商店中,我需要发布更新


不确定这是否是一种“最佳实践”,但在我的应用程序中,我从不保持数据库打开。我几乎在每个 CRUD 操作之前/之后打开和关闭它。它适用于 Android 2.2。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 2.X 和 3.X 上的 SQLiteOpenHelper 问题 的相关文章

随机推荐

  • 为什么要在 php 中使用异常处理?

    我已经编写 PHP 很长一段时间了 但对 PHP 5 的了解并不多 我了解 PHP 5 中的异常处理已经有一段时间了 但从未真正研究过它 经过快速谷歌后 使用异常处理似乎毫无意义 我看不出使用它比仅使用一些 if 语句 也许还有我自己的错误
  • 如何中断 java.util.Scanner nextLine 调用

    我正在使用多线程环境 其中一个线程通过重复调用不断侦听用户输入scanner nextLine 要结束应用程序 此运行循环将由另一个线程停止 但侦听线程不会停止 直到最后一个用户输入完成 由于nextLine 关闭流似乎不是一个选择 因为我
  • 异常:无效参数:continuationToken

    我正在尝试使用 工作示例 线性迭代器 来实现一个简单的延续令牌这个帖子 https stackoverflow com questions 45689629 how to use continuationtoken with recursi
  • NSFetchedResultsController XCode 7 问题

    Xcode 7 beta 6 和 NSFetchedResultsController 今天让我头疼 如果我使用 Xcode 6 编译相同的代码 使用 Swift 2 修复 程序可以在设备和模拟器 iOS 7 iOS8 上运行 但是 如果我
  • 如何更改更新数据库 ef 迁移的连接字符串?

    我正在尝试运行 Update Database 并且想指定连接字符串 但 CLI 正在查看错误的字符串 我的 appsettings json 文件中有两个连接字符串 Logging IncludeScopes false LogLevel
  • iOS/Objective-C 的 switch 语句中的失败

    假设我有一个包含五个案例的 switch 语句 但只有两个真正的方法被调用 如下所示 switch condition case conditionOutcome1 self firstMethod break case condition
  • 如何在隐身模式下启用 chrome 扩展的 pageAction 图标?

    即使选择 允许在隐身模式 后 使用 pageaction 在某些网址中呈现的扩展也不会在隐身模式下显示 background js 有以下内容 chrome runtime onInstalled addListener function
  • 使用WebView setHttpAuthUsernamePassword?

    我正在尝试进行基本身份验证以查看受保护的网址 我想访问受保护的网址 如下所示 http api test com userinfo vid 1234 所以我用 WebView 执行以下操作 mWebView setHttpAuthUsern
  • 如何在 Flutter 中保存用户登录详细信息?

    我是颤振新手 想要制作一个只有经过身份验证的用户 通过填写电子邮件和密码 才能使用的应用程序 所以我正在考虑制作一个名为的根小部件Authentication我将在其中检查用户是否经过身份验证 如果他们是那么带他们去Home Widget
  • ASP.NET MVC 4 cookie 消失

    我有一个 ASP NET 应用程序 它将身份验证 cookie 发送到 ASP NET MVC 应用程序 用作后台应用程序 我添加了一个全局过滤器 用于检查身份验证 cookie 的每个控制器操作 如果cookie存在 则允许用户进入该页面
  • 使用php在两个日期之间选择MS访问

    我想使用 php 从 ms access 选择数据 这是我的代码 dbdir D payroll2 ATT2000 MDB conn odbc connect DRIVER Microsoft Access Driver mdb DBQ d
  • 使用另一个视图控制器中的原型单元

    我想在多个故事板场景中使用相同的表视图单元格布局 我可以在其中一个场景中设计原型单元并以某种方式在另一个表视图控制器中访问它 即 dequeueReusableCellWithIdentifier 吗 这是不可能的 但您可以将原型单元格从源
  • 使用Boost获取成员函数的数量和参数类型? (升压::function_traits)

    对于普通的普通函数来说 它工作得很好 下面的代码工作得很好 它只打印应该的内容 int cdecl int char 2 int char include
  • 如何模拟 TCP/IP 错误?

    在多层应用程序上 我需要模拟各种 TCP IP 错误来测试一些重新连接代码 有谁知道我可以使用什么工具 基于 Windows 来实现此目的 谢谢 Scapy http secdev org projects scapy 允许您控制数据包的各
  • 有没有一种 CSS 唯一的方法来完全隐藏部分溢出的元素?

    想象一下 您有一个元素的高度是浏览器窗口高度的百分比 该元素包含一堆块元素 有没有办法使用类似的东西overflow hidden但要确保最后一个块元素在溢出时完全隐藏而不是部分隐藏 使用 JavaScript 很容易做到这一点 但我更喜欢
  • 在ms access中存储大量图像

    我有一个库存 联系人数据库 需要在其中存储大量图像 10k 件物品 1k 人 现在 由于纯粹的膨胀 显然 ole 对象是不可能的 有没有更好的方法来做到这一点 例如存储图像的路径 将存储在数据库的文件夹中 并在我需要的地方显示该图像 这会很
  • 如何在没有 create-react-app 的情况下手动配置 React 的最小设置?

    我不想使用create react app 那么我该如何配置minimal一个简单的反应应用程序的工作开发环境 Note 我知道我可能会包含所有内容在运行时作为 JS https reactjs org docs add react to
  • Django为模型表单返回两个单独的__str__

    我有一个Task包含任务和实体外键的模型 class Task models Model task models CharField max length 500 entity models ForeignKey Entity 我有一个与一
  • 如何在meteor中建立单独的测试和开发数据库

    我已经为我的流星应用程序编写了一些测试 由于他们具有删除所有文档或填充新文档的设置和拆卸方法 因此我想在专用于测试的数据库上运行它们 我注意到数据库存储在 meteor local db 中 理想情况下 我希望从不同的端口访问 db tes
  • Android 2.X 和 3.X 上的 SQLiteOpenHelper 问题

    所以我犯了一个很大的错误 在 android 4 0 上测试我的代码 并认为它在其他版本上也能正常工作 但我在使用 SQLiteOpenHelper 时遇到 2 X 和 3 X 的问题 首先是代码 public class HelperDB