3

有人可以帮忙SQLite databaseandroid

首先,我从这里开始使用教程。它在我的应用程序中运行良好,但是当我添加新列并将database版本更改为“2”时,应用程序停止并且在文件资源管理器中,没有database找到。任何人都可以说明问题所在和解决方案。

编辑:这是我的一些更改.. 这是我的 FirstClass.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);
  }

这是我的 TodoDatabaseHelper.java

private static final String DATABASE_NAME = "todotable2.db";
  private static final int DATABASE_VERSION = 2;

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

  // Method is called during creation of the database
  @Override
  public void onCreate(SQLiteDatabase database) {
    FirstClass.onCreate(database);
  }

  // Method is called during an upgrade of the database,
  // e.g. if you increase the database version
  @Override
  public void onUpgrade(SQLiteDatabase database, int oldVersion,
      int newVersion) {
    FirstClass.onUpgrade(database, oldVersion, newVersion);
  }
4

3 回答 3

1

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

我有一个类似的案例,我保存了一些用户输入值,但每次我的应用程序崩溃时。所以我将版本设置为相同的整数(例如,对于旧数据库和新数据库,只有版本 1,旧版本不是版本 1,新版本不是版本 2),删除旧数据库并创建一个全新的数据库,其中包含所有新数据。这工作非常好......

编辑

上面的声明是为了更新,不是为了升级,对不起。但是现在,我查看了您的代码,是否有可能因为错误而没有创建数据库?我认为您忘记在 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
        + ");";
于 2012-11-28T07:55:49.133 回答
0

根据我的方法

@Override public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) { FirstClass.onUpgrade(database, oldVersion, newVersion); }

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

于 2012-11-28T08:33:35.963 回答
0

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

解决方案:

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

(2) 您必须在您的手机中卸载您的应用程序并重新安装。

于 2013-01-28T06:32:16.023 回答