`

android.database.sqlite.SQLiteReadOnlyDatabaseException: attempt to write a read

阅读更多
android.database.sqlite.SQLiteReadOnlyDatabaseException: attempt to write a readonly database

在开发一个app的过程中,使用了Provider,通过install 的方式将APP运行在机器上,再通过setting清除该APP再运行APP,一切仍正常,但若通过系统签名将app push到system/app上,再在setting上清除该APP的数据,再运行就发生了android.database.sqlite.SQLiteReadOnlyDatabaseException: attempt to write a readonly database。 同样的code为什么通过不同的方式就会有问题呢?我纠结了好久,先从代码去分析mOpenHelper.getWritableDatabase()它会检查数据库是否存在,如果不存在就会创建。但是我到/data/data/com...../databases/下却没有DB,而mOpenHelper.getWritableDatabase()返回DB不为空。再insert的时候就会发生attempt to write a readonly database!为何明明数据库不存在了,但仍返回不为空的DB??

接着我下载了一个Provider Demo做了系统签名并push 到system/app上,按照那测试路径,发现仍正常!太不可思议了!!

然后做了很多尝试,都没有找到原因...

为了赶出code,采取了一种很暴力的方式解决,就是
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
  File database=new File("/data/data/com.lewa.updater/databases");
        if(!database.exists()&&db!=null){
        	db.close();
        	db = mOpenHelper.getWritableDatabase();
        }


上了code接着解决另外一个关于写文件需要权限的bug,这也是很难啃的一个,折腾了一晚上都没有解决,但无意让我发现了上一个bug的原因,发现了我的app和provide demo 的app差别在于这里
    <application
        android:name="com...."
        android:icon="@drawable/icon"
        android:label="@string/app_name"
        android:theme="@style/Theme.Style"
        android:persistent="true" >

这行android:persistent="true",我把这行加入到demo里面,果真,android.database.sqlite.SQLiteReadOnlyDatabaseException: attempt to write a readonly database发生了,然后查阅了http://www.cnblogs.com/perseus/archive/2012/01/11/2319660.html这文章,就解释了上面那一切了。

oh! My God!
分享到:
评论

相关推荐

    Android多线程操作sqlite(Sqlite解决database locked问题)

    在Android应用开发中,SQLite是一个重要的本地数据存储解决方案。它是一个轻量级的数据库系统,支持多种数据库操作,如创建、查询、更新和删除数据。然而,在多线程环境中,由于并发访问数据库,可能会遇到...

    android中自建数据库时遇到的最最最常见的错误的解决方法!!!

    hello!...Attempt to invoke virtual method ‘android.database.sqlite.SQLiteDatabase android.content. Context.openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteD

    sqlite3文件(sqlite3.dll,sqlite3.h,sqlite3.lib)

    标题提到的"sqlite3文件"主要包括三个关键组成部分:`sqlite3.dll`、`sqlite3.h`和`sqlite3.lib`,它们在开发和运行使用SQLite3的应用程序时起着至关重要的作用。 1. `sqlite3.dll`: 这是一个动态链接库文件,通常...

    android连接SQLite数据库源代码

    import android.database.sqlite.SQLiteDatabase.CursorFactory; /** * *@author Administrator DataBaseHelper是一个访问SQLite的助类,提供两个方面的功能 * 1.getReadableDatebase(),getWriteableDatabase()...

    System.Data.SQLite.dll(sqlite_1.0.76.0.zip)

    System.Data.SQLite.dll是SQLite在.NET平台上的一个封装库,它为C#和其他.NET语言提供了对SQLite数据库引擎的全面支持。SQLite是一款轻量级、自包含的数据库系统,广泛应用于嵌入式系统和移动应用,因为它不需要单独...

    SQLite.Interop.dll for sqlite expert professional 4.2

    SQLite.Interop.dll for sqlite expert professional 4.2 用与SQLite Expert打开本地已加密的数据库的插件。1.将SQLite.Interop.dll x86拷贝到SQLite Expert安装路径(如:x:\Program Files (x86)\SQLite Expert\...

    System.Data.SQLite.DLL C# 读写sqlite数据库

    System.Data.SQLite.DLL 是一个用于 .NET Framework 的 SQLite 数据库引擎的 ADO.NET 提供程序。这个库使得 C# 开发者能够方便地在他们的应用程序中集成 SQLite 数据库的读写功能。SQLite 是一个轻量级、开源的关系...

    Android.Database.Best.Practices.0134437993

    Stroud reviews the core database theory and SQL techniques you need to efficiently build, manipulate, and read SQLite databases. He explores SQLite in detail, illuminates Android’s APIs for database ...

    Apress.The.Definitive.Guide.to.SQLite.May.2006.rar

    《Apress.The.Definitive.Guide.to.SQLite.May.2006》这本书是SQLite领域的权威指南,为开发者提供全面的SQLite知识,包括其内部工作原理、API使用、性能优化和跨平台操作。 SQLite的特性包括: 1. **轻量级**:...

    Hibernate连接SQLite配置说明和方言代码

    Hibernate连接SQLite配置步骤: 1、添加SQLite库: 1.1、将两个jar包:com.zy.hibernate.dialect.SQLiteDialect.jar、sqlite-jdbc-3.7.2.jar拷贝到“\WEB-INF\lib”文件夹下; 2、配置hibernate: 2.1、将...

    SQLite JDBC Driver

    Class.forName("org.sqlite.JDBC"); conn = DriverManager.getConnection("jdbc:sqlite:example.db"); System.out.println("Connection to SQLite has been established."); Statement stmt = conn....

    DB.Browser.for.SQLite-3.12.2 64位

    在Android开发中,SQLite是常见的轻量级数据库,用于存储和管理应用程序的数据。SQLite以其小巧、高效、易于集成的特点,深受开发者喜爱。而DB.Browser.for.SQLite-3.12.2 64位是一款功能强大的SQLite数据库管理工具...

    System.Data.SQLite_sqlite_

    在.NET环境中,开发人员可以利用System.Data.SQLite.dll来创建、读取、更新和删除SQLite数据库中的数据。这个DLL文件是.NET Framework的一部分,它提供了ADO.NET接口,使得.NET开发者能够通过.NET代码与SQLite数据库...

    SQLite数据库 sqlitedll库文件 sqlite驱动JAR包 sqlite工具

    15 // If you want to only create a database in memory, exclude the +fileName 16 Connection conn = DriverManager.getConnection("jdbc:sqlite:"+fileName); 17 // Create a Statement object for the database...

    sqlite3:not found 解决方法

    标题中的“sqlite3:not found”是一个常见的错误提示,通常在Linux或类Unix系统中出现,意味着系统找不到sqlite3命令行工具。SQLite是一款轻量级的数据库管理系统,它被广泛应用于嵌入式设备、移动应用以及服务器端...

    System.Data.SQLite.dllSystem.Data.SQLiteSystem.Data.SQLite.dll

    System.Data.SQLite.dll是SQLite数据库与.NET Framework交互的核心组件,它为.NET开发者提供了访问SQLite数据库的能力。SQLite是一款轻量级、开源、自包含的关系型数据库,广泛应用于嵌入式系统和移动应用,因为它...

    sqlite运行所需Vc++运行环境,纯净版System.Data.SQLite.dll及SQLite.Interop.dll

    将当前说明文档的目录下的x64、x86目录和System.Data.SQLite.dll文件复制到您的应用程序根目录中(注意更新引用)。 如果是WEB网站,则复制到Bin目录下即可,发布时,也注意x64和x86一起打包发布 注意,当前的...

    System.Data.SQLite.DLL 和 SQLite.net.DLL chm帮助文件

    在.NET开发环境中,有两个主要的.NET库用于与SQLite交互:System.Data.SQLite.DLL和SQLite.net.DLL。 System.Data.SQLite.DLL是官方的.NET Framework数据提供程序,它实现了ADO.NET接口,使得.NET开发者可以使用...

    DB.Browser.for.SQLite-3.12.0-win64.zip

    SQLite数据库查看工具,用于Android项目中databases的数据库操作。DB Browser for SQLite 是一个高品质,可视化,开放源码的工具。用于创建,设计和编辑SQLite兼容的数据库文件。它适用于希望创建数据库,检索和编辑...

Global site tag (gtag.js) - Google Analytics