创建新表时遇到一点问题。当我使用 CREATE TABLE 命令时,我的新表按应有的方式形成,但是当我退出活动时,应用程序崩溃,并且我在 logcat 中得到一个表已存在。如果我使用 CREATE TABLE IF NOT EXISTS ,则不会形成新表,而只是将新的数据行添加到前一个表中,并且不会崩溃。这有什么问题吗?我想添加表而不给我已经存在的表,并且我希望添加表而不将行添加到不同的表。
SqliteHelper 类:
public class MySQLiteHelper extends SQLiteOpenHelper {
public static final String TABLE_NAME = MainActivity.NameName;
public static final String COLUMN_ID = "_id";
public static final String COLUMN_COMMENT = "comment";
public static final String COLUMN_LAT = "lat";
public static final String COLUMN_LONG = "long";
public static final String COLUMN_RADI = "radi";
private static final String DATABASE_NAME = "spraylogs.db";
private static final int DATABASE_VERSION = 1;
public static final String NEWTABLE = "CREATE TABLE "
+ TABLE_COMMENTS + "(" + COLUMN_ID
+ " integer primary key autoincrement, " + COLUMN_COMMENT
+ " text not null," + COLUMN_LAT+ "," + COLUMN_LONG + "," + COLUMN_RADI + ");";
public static final String SaveIt = "CREATE TABLE IF NOT EXISTS "
+ TABLE_COMMENTS + "(" + COLUMN_ID
+ " integer primary key autoincrement, " + COLUMN_COMMENT
+ " text not null," + COLUMN_LAT+ "," + COLUMN_LONG + "," + COLUMN_RADI + ");";
MySQLiteHelper(Context context) {
super(context, context.getExternalFilesDir(null).getAbsolutePath() + "/" + DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase database) {
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.w(MySQLiteHelper.class.getName(),
"Upgrading database from version " + oldVersion + " to "
+ newVersion + ", which will destroy all old data");
db.execSQL("DROP TABLE IF EXISTS " + NEWTABLE);
onCreate(db);
}
}
这就是它应该如何工作的。CREATE TABLE
如果表已经存在,则会抛出异常。CREATE TABLE IF NOT EXISTS
如果表不存在则创建该表,如果存在则忽略该命令。如果您希望它删除旧表,请使用DELETE TABLE IF EXISTS
before CREATE TABLE
。如果您想更改架构,请使用ALTER TABLE
, not CREATE TABLE
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)