如何在sqlite中更新表?
我有两个表首先是“TABLE_SUBJECT”,第二个是“TABLE_CHAPTER”。现在我想
添加一些列并删除之前的。 我的问题是如何做到这一点。 我试着更新但是
它显示以前不是新的。 我需要使用新列删除先前和更新表。
我更改了版本号,但它不起作用。 请给我提示或参考。
这是我的一些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); }
你试试这个代码
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); }
您无法删除SQLite中的列。 常见问题解答中有一个解决方法。
要添加新列,您只需增加数据库版本并将所获得的创建字符串更改为所需的数据库布局(删除要删除的列并添加另一列)。 当下次打开数据库时,将调用“升级”,这将删除现有表。 之后,创建更改的表。 这不是一个好方法,因为您丢失了数据库中的所有数据。
要在不丢失所有数据的情况下添加新列,您必须将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 …不要在案例结尾处添加中断。 这样,如果应用更新将版本增加到3并且更新的应用仍然在1(可能它错过了更新),则应用所有更改。
在这里,您可以找到alter table的文档。 sqlite站点(sqlite.org)通常对查找这类内容有很大帮助。
- 解析服务器开源Android Twitter登录不起作用
- Android Wear和智能手机之间的数据传输安全性
- JavaScript不适用于ICS
- 使用smack库在JAVA中实现GCM CCS(XMPP)。 gcm.googleapis.com连接失败
- 关于create activity的Robolectric 3.0 java.lang.NoSuchMethodException
- AES加密,在解密文件中获得额外的垃圾字符
- 检测字符串中的字符是否是表情符号(使用Android)
- 使用asmack for android在XMPP数据包的Message标签中添加自定义属性?
- Android导航抽屉,更改文字/hover颜色