Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.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 当我重命名字段DB\u NAME或DB\u TABLE时,为什么程序会崩溃?_Java_Android_Sqlite_Adapter_Rename - Fatal编程技术网

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,现在可以工作了。谢谢你,很抱歉耽误了你的时间。不客气,我们是来互相帮助的。如果你能把这个答案标记为正确,我将不胜感激。