Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了无法创建Android SQLite数据库:PRAGMA错误大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
错误

E/Database( 8614): Failure 21 (out of memory) on 0x0 when preparing 'PRAGMA user_version = 1'.
E/Database( 8614): Failure 21 (out of memory) on 0x0 when preparing 'ROLLBACK;'.
D/Database( 8614): exception during rollBACk,maybe the DB prevIoUsly performed an auto-rollBACk
D/AndroidRuntime( 8614): ShutTing down VM
W/dalvikvm( 8614): threadid=3: thread exiTing with uncaught exception (group=0x4001dc20)
E/AndroidRuntime( 8614): Uncaught handler: thread main exiTing due to uncaught exception

我目前的代码

import android.content.Context;
import android.database.cursor;
import android.database.sqlite.sqliteDatabase;
import android.database.sqlite.sqliteOpenHelper;

public class Database extends sqliteOpenHelper {

   private static String Databasename = "Entries.db"; 

   public Database(Context context) {
      super(context,Databasename,null,1);
   }

   public void onCreate(sqliteDatabase D) {
      D.execsql(
            "create table Containers ("
            + "ID INTEGER PRIMARY KEY AUTOINCREMENT,"
            + "Parent IntegeR,"
            + "Sequence IntegeR,"
            + "@R_390_4687@T"
            + ")"
      );
      D.execsql(
            "create table Files ("
            + "ID INTEGER PRIMARY KEY AUTOINCREMENT,"
            + "@R_390_4687@T,"
            + "@R_321_3801@"
            + ")"
      );
      D.execsql("INSERT INTO Containers (Parent,Sequence,Name) VALUES (0,2,\"TestLine2\")");
      D.execsql("INSERT INTO Containers (Parent,1,\"TestLine1\")");
      D.execsql("INSERT INTO Containers (Parent,3,\"TestLine3\")");
      D.execsql("INSERT INTO Containers (Parent,Name) VALUES (2,\"TestLine2-1\")");
      D.execsql("INSERT INTO Containers (Parent,\"TestLine2-2\")");
      D.close();
   }

   @Override
   public void onUpgrade(sqliteDatabase arg0,int arg1,int arg2) {
   }

   public static cursor Query(Context context,String sql) {
      StartQuerySeries(context);
      cursor Result = Query(sql);
      StopQuerySeries();
      return Result;
   }

   private static Database D = null;
   public static void StartQuerySeries(Context context) {
      D = new Database(context);
   }
   public static cursor Query(String sql) {
      sqliteDatabase X = D.getWritableDatabase();
      return X.rawQuery(sql,null);
   }
   public static void StopQuerySeries() {
      D.close();
      D = null;
   }

}

当在主Activity中调用它时,会发生错误

Database.Query(this,"INSERT INTO Files (Parent,Name,Text) VALUES (1,\"Item1\",\"Item1 Text\")");

错误发生在“D.getWritableDatabase()”行…我最接近的事情是,在http://www.sqlite.org/c3ref/c_abort.html,故障21说“库使用不正确” – 任何帮助?

哦,我检查了 – 数据库文件确实已经创建了,但是里面没有表格,因此上面的onCreate()没有被调用.

解决方法

我在2分钟前遇到了同样的问题.我通过删除D.close()行来解决它.

当你关闭传递的sqliteDatabase对象时,似乎android不喜欢它.我认为调用onCreate()方法的周围代码已经正确地管理打开和关闭数据库.所以你只需要做所有事情来获得表格.

也许在创建表之后,在这个对象上做了一些工作.我想知道这是否也解决你的问题.

我也非常希望听到这种行为的确切解释.

大佬总结

以上是大佬教程为你收集整理的无法创建Android SQLite数据库:PRAGMA错误全部内容,希望文章能够帮你解决无法创建Android SQLite数据库:PRAGMA错误所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。