【问题标题】:Add new Table in sqlite database在 sqlite 数据库中添加新表
【发布时间】:2013-01-18 10:53:41
【问题描述】:

我有一个问题。

我的数据库中只有一张表

@Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL( "CREATE TABLE books (_id INTEGER PRIMARY KEY AUTOINCREMENT,title TEXT, author TEXT,isbn TEXT,city TEXT);");
        Log.v("onCreate-------","called onCreate"); 

    }

这里:-

sqlite> select * from books;

也可以正常工作。

但我想添加新表,所以我想在这里添加:-

@Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        android.util.Log.w("books",
        "Upgrading database, which will destroy all old data");

        //db.execSQL("ALTER TABLE myallbooks ADD COLUMN city2");
        db.execSQL("CREATE TABLE myfields (author TEXT,isbn TEXT,city TEXT);");



        Log.v("onUpgrade-------","called onUpgrade with alter"); 
    }

更改版本号后,我运行了应用程序,但在任何地方都没有找到该表。

sqlite> 从 myfields 中选择 *;

Error:-no such table :myfield.........为什么它没有创建

【问题讨论】:

  • 为什么要在 onUpgrade() 中建表?
  • 告诉我在哪里可以添加新表。如果需要的话。
  • 我已经贴在下面了,请大家看看...

标签: android sqlite


【解决方案1】:

onUpgrade() 将在您将数据库版本更改为更高版本时调用。您似乎没有增加版本并尝试选择 myfields 表的列。

请检查您是否将版本号更新为比之前版本更高的版本号。

【讨论】:

  • 好的,我再试一次。这意味着我的代码很好。我可以创建表 onUpgrade()。
  • 是的,您也可以在 onUpgrade() 中创建表。
【解决方案2】:
@Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL( "CREATE TABLE books (_id INTEGER PRIMARY KEY AUTOINCREMENT,title TEXT, author TEXT,isbn TEXT,city TEXT);");
        Log.v("onCreate-------","called onCreate"); 

   db.execSQL("CREATE TABLE myfields (author TEXT,isbn TEXT,city TEXT);");

    }

@Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        android.util.Log.w("books",
        "Upgrading database, which will destroy all old data");

        //db.execSQL("ALTER TABLE myallbooks ADD COLUMN city2");
       // db.execSQL("CREATE TABLE myfields (author TEXT,isbn TEXT,city TEXT);");

          //delete tables
                db.execSQL("DROP TABLE IF EXISTS books");
          // Create tables again`enter code here`
        onCreate(db);

        Log.v("onUpgrade-------","called onUpgrade with alter"); 
    }

【讨论】:

  • onupgrade()............引起:android.database.sqlite.SQLiteException:无法将只读数据库从版本2升级到3:/data/数据/com.example.upgrade/databases/upgrade.db
  • 异常——如果我在升级中编写创建表查询。
  • 它工作正常..但我不认为我们可以在升级中编写创建表查询
  • 看看developer.android.com/reference/android/database/sqlite/…, int, int) SQLite ALTER TABLE 文档可以在这里找到。如果添加新列,您可以使用 ALTER TABLE 将它们插入到活动表中。如果重命名或删除列,可以使用 ALTER TABLE 重命名旧表,然后创建新表,然后用旧表的内容填充新表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-18
  • 1970-01-01
相关资源
最近更新 更多