Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在sqlite中更新表?_Java_Android_Sqlite - Fatal编程技术网

Java 如何在sqlite中更新表?

Java 如何在sqlite中更新表?,java,android,sqlite,Java,Android,Sqlite,我有两张表格,第一张是“表格主题”,第二张是“表格章节”。现在我想 添加一些列并删除上一列。我的问题是如何做到这一点。我尝试更新,但 它显示以前的而不是新的。我需要删除以前的表并用新列更新表。 我更改了版本号,但它不工作。请给我提示或参考 以下是我对SQLite的一些代码: @Override public void onCreate(SQLiteDatabase database) { database.execSQL(DATABASE_CREATE); database.e

我有两张表格,第一张是“表格主题”,第二张是“表格章节”。现在我想
添加一些列并删除上一列。我的问题是如何做到这一点。我尝试更新,但
它显示以前的而不是新的。我需要删除以前的表并用新列更新表。
我更改了版本号,但它不工作。请给我提示或参考

以下是我对SQLite的一些代码:

@Override
public void onCreate(SQLiteDatabase database) {

    database.execSQL(DATABASE_CREATE);
    database.execSQL(DATABASE_CREATE1);

}

 @Override
public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) {
    // TODO Auto-generated method stub
    Log.w(MySQLiteHelper.class.getName(), "Upgrading database from version "
            + oldVersion + " to " + newVersion
            + ", which will destroy all old data");
    database.execSQL("DROP TABLE IF EXISTS " + TABLE_SUBJECT);
    database.execSQL("DROP TABLE IF EXISTS" + TABLE_CHAPTER);
    onCreate(database);
}

无法删除SQLite中的列。中描述了一种变通方法

要添加一个新列,只需增加数据库版本并将创建字符串更改为所需的数据库布局(删除要删除的列并添加另一列)。下次打开数据库时,将调用onUpgrade,这将删除现有表。然后创建更改的表。这不是一个好方法,因为您丢失了数据库中的所有数据

要在不丢失所有数据使用的情况下添加一个新列,您必须将onUpgrade方法更改为如下内容(这预计您当前的数据库版本为1,如果不是简单地在案例中更改数字的话),然后增加数据库版本:

@Override
public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) {
    switch (oldVersion) {
    case 1: 
        database.execSQL("ALTER TABLE " + 
            TABLE_SUBJECT + " ADD COLUMN " + KEY_NEWCOLUMN + " text not null");
        database.execSQL("ALTER TABLE " + 
            TABLE_CHAPTER + " ADD COLUMN " + KEY_NEWCOLUMN + " text not null");
    }
}
此方法是可伸缩的,因为当有新的更改时,您只需添加案例2、案例3。。。不要在案例末尾添加break。这样,如果应用程序更新将版本增加到3,并且更新后的应用程序仍处于1状态(可能错过了更新),则所有更改都将应用

您可以找到ALTERTABLE的文档。sqlite站点(sqlite.org)通常对查找此类内容有很大帮助。

您可以尝试以下代码

public long update_todo_not(String a, String b, String c, String d,
        String e, String f, String g, String id) {
     ContentValues con = new ContentValues();

     con.put("title", a);
     con.put("description", b);
     con.put("due_date", c);
     con.put("alarm_time", d);
     con.put("category", e);
     con.put("alarm_set",f);
     con.put("priority", g);
     Log.v("priority", g+"");
     return mDb.update(DATABASE_TABLE_TODO_LIST, con, "id ='" + id + "'",null);

}

我刚刚读了你们的答案,我只是想知道应用程序是如何知道数据库的哪个版本的?原来的问题只有
database.execSQL(database\u CREATE)没有说明数据库是什么版本,我现在面临同样的问题