Java 当我重命名字段DB\u NAME或DB\u TABLE时,为什么程序会崩溃?
救命啊Java 当我重命名字段DB\u NAME或DB\u TABLE时,为什么程序会崩溃?,java,android,sqlite,adapter,rename,Java,Android,Sqlite,Adapter,Rename,救命啊 public class DB { private static final String DB_NAME = "mydb"; private static final int DB_VERSION = 1; private static final String DB_TABLE = "mytab"; public static final String COLUMN_ID = "_id"; public static final String COLUMN_I
public class DB {
private static final String DB_NAME = "mydb";
private static final int DB_VERSION = 1;
private static final String DB_TABLE = "mytab";
public static final String COLUMN_ID = "_id";
public static final String COLUMN_IMG = "img";
public static final String COLUMN_TXT = "txt";
private static final String DB_CREATE =
"create table " + DB_TABLE + "(" +
COLUMN_ID + " integer primary key autoincrement, " +
COLUMN_IMG + " integer, " +
COLUMN_TXT + " text" +
");";
private final Context mCtx;
private DBHelper mDBHelper;
private SQLiteDatabase mDB;
public DB(Context ctx) {
mCtx = ctx;
}
// открыть подключение
public void open() {
mDBHelper = new DBHelper(mCtx, DB_NAME, null, DB_VERSION);
mDB = mDBHelper.getWritableDatabase();
}
// закрыть подключение
public void close() {
if (mDBHelper!=null) mDBHelper.close();
}
// получить все данные из таблицы DB_TABLE
public Cursor getAllData() {
return mDB.query(DB_TABLE, null, null, null, null, null, null);
}
// добавить запись в DB_TABLE
public void addRec(String txt, int img) {
ContentValues cv = new ContentValues();
cv.put(COLUMN_TXT, txt);
cv.put(COLUMN_IMG, img);
mDB.insert(DB_TABLE, null, cv);
}
// класс по созданию и управлению БД
private class DBHelper extends SQLiteOpenHelper {
public DBHelper(Context context, String name, CursorFactory factory,
int version) {
super(context, name, factory, version);
}
// создаем и заполняем БД
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(DB_CREATE);
ContentValues cv = new ContentValues();
for (int i = 1; i < 5; i++) {
cv.put(COLUMN_TXT, "sometext " + i);
cv.put(COLUMN_IMG, R.drawable.ic_launcher);
db.insert(DB_TABLE, null, cv);
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
}
因此,如果在初始化时重命名字段DB_NAME或DB_TABLE,就会出现错误。如果我不碰这些名字,一切都没问题,但我需要更改它们。试图更改仿真器-没有帮助。您必须升级数据库版本,因此在其上增加一个,如果您想保存数据库以前的信息,请在onUpgrade中实现它:
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//implement your logic of saving your infos here
}
如果您不介意清理数据库,请执行以下操作:
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
db.execSQL("DROP TABLE IF EXISTS '" + DATABASE_TABLE+"'");
onCreate(db);
}
如果您更改字段,您还必须更改logcat的版本,然后…卸载privious one并安装在Java代码中创建模式对我来说似乎很愚蠢。通过执行SQL命令创建架构,并在应用程序启动时将其准备就绪。09-16 11:57:28.531:W/dalvikvm447:threadid=1:thread退出,未捕获异常组=0x40015560 09-16 11:57:28.591:E/AndroidRuntime447:FATAL异常:main 09-16 11:57:28.591:E/AndroidRuntimeException:无法启动活动ComponentInfo{ru.patufedor.scbi/ru.patufedor.scbi.User}:android.database.sqlite.SQLiteException:没有这样的表:教师:,编译时:从教师处选择*如您所建议的。打印这样的错误:09-16 11:57:28.591:E/AndroidRuntime447:FATAL异常:main 09-16 11:57:28.591:E/AndroidRuntime447:java.lang.RuntimeException:无法启动活动组件信息{ru.patufedor.scbi/ru.patufedor.scbi.User}:android.database.sqlite.SQLiteException:没有这样的表:教师:,编译时:从Teachers中选择*是否尝试在onUpgrade中运行onCreatedb?表似乎已被删除,但没有再次创建。你把你的DB_版本变量升级到2了吗?是的,当然,我做了你的第二个建议@Override public void onUpgradeSQLiteDatabase DB,int oldVersion,int newVersion{DB.execSQLDROP TABLE,如果存在“+DB_TABLE+”;onCreatedb;}@Bruno Franco。我不明白它是怎么工作的,但我把版本改成了3,现在可以工作了。谢谢你,很抱歉耽误了你的时间。不客气,我们是来互相帮助的。如果你能把这个答案标记为正确,我将不胜感激。