在SQLite数据库中完成更改后没有创建数据库

时间:2012-11-28 06:50:04

标签: android android-sqlite sqliteopenhelper

有人可以在SQLite database的{​​{1}}帮助吗?

首先,我使用了来自here的教程。它在我的应用程序中运行良好,但是当我添加新列并将android版本更改为“2”时,应用程序停止并且在文件资源管理器中,找不到database。任何人都可以说明问题是什么解决方案。

编辑: 这是我的一些变化.. 这是我的FirstClass.java

database

这是我的TodoDatabaseHelper.java

// Database creation SQL statement
  private static final String DATABASE_CREATE = "create table " 
      + TABLE_TODO
      + "(" 
      + COLUMN_ID + " integer primary key autoincrement, " 
      + COLUMN_CATEGORY + " text not null, " 
      + COLUMN_SUMMARY + " text not null," 
      + COLUMN_DESCRIPTION
      + " text not null" 
      + COLUMN_DATE + "date not null " //i have added the date column
      + ");";
     public static void onCreate(SQLiteDatabase database) {
    database.execSQL(DATABASE_CREATE);

  }

  public static void onUpgrade(SQLiteDatabase database, int oldVersion,
      int newVersion) {
    Log.w(FirstClass.class.getName(), "Upgrading database from version "
        + oldVersion + " to " + newVersion
        + ", which will destroy all old data");
    database.execSQL("DROP TABLE IF EXISTS " + TABLE_TODO);
   // database.execSQL("INSERT INTO "+TABLE_TODO+" VALUES (null, datetime()) ");
    onCreate(database);
  }

3 个答案:

答案 0 :(得分:1)

我不确定我是否正确,但是,如果你在你的oUnUpgrade方法中删除你的数据库,哪个dab应该进行系统升级?我的意思是,如果您为您的数据库设置了一个新版本,它应该与之前的数据库相同,但只会更改而不会被删除。

我有类似的情况,我保存了一些用户输入值,但每次崩溃都来自我的应用程序。所以我将版本设置为相同的整数(例如旧版本的db和新版本的db版本1,旧的版本1版本,旧版本的版本2版本),删除旧的db并创建一个包含所有新数据的全新版本。这非常好....

修改

上面的陈述是为了更新,而不是升级,抱歉。但是现在,我已经查看了你的代码,是否有可能因为错误而没有创建数据库?我想你忘了在COLUMN_DESCRIPTION之后设置一个点。这是我的编辑:

      private static final String DATABASE_CREATE = "create table " 
        + TABLE_TODO
        + "(" 
        + COLUMN_ID + " integer primary key autoincrement," 
        + COLUMN_CATEGORY + " text not null," 
        + COLUMN_SUMMARY + " text not null," 
        + COLUMN_DESCRIPTION
        + " text not null," //HERE YOU FORGOT COMMA
        + COLUMN_DATE + " date not null" //i have added the date column
        + ");";

答案 1 :(得分:0)

根据我的方法

@覆盖   public void onUpgrade(SQLiteDatabase数据库,int oldVersion,       int newVersion){     FirstClass.onUpgrade(database,oldVersion,newVersion);   }

正在吸收这个问题。因为您只是升级版本而不是再次创建数据库。升级数据库后,您需要像对表格一样调用onCreate。

答案 2 :(得分:0)

使用 onUpgrade(),您只需删除表结构而不是整个数据库。

解决方案:

(1)更新数据库时以编程方式删除应用程序。

(2)您必须在移动设备中卸载应用程序并重新安装。