SQLite: «нет такой таблицы» в Android - PullRequest
1 голос
/ 20 мая 2019

Я следовал онлайн-уроку, чтобы изучить SQLite для моего проекта, но мое приложение продолжает сбой из-за ошибки, что таблица не существует. Однако, когда я просматриваю базу данных с помощью менеджера SQLite, она существует.

Это мой код

public class SQLiteDbHelper extends SQLiteOpenHelper {

private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "mybook";
private static final String DB_PATH_SUFFIX = "/databases";
static Context mCtx;

SQLiteDbHelper(Context context){
    super(context,DATABASE_NAME,null,DATABASE_VERSION);
    mCtx = context;
}

public ArrayList<Model> getDetails(){
    SQLiteDatabase db = this.getReadableDatabase();
    ArrayList<Model> modelList = new ArrayList<>();

    //crash occurs here
    Cursor cursor = db.rawQuery("SELECT * FROM booktable",null);
    if (cursor!=null){
        while (cursor.moveToNext()){
            Model count = new Model(cursor.getInt(0),cursor.getString(1),cursor.getString(2));
            modelList.add(count);
        }
        cursor.close();
        db.close();
    }
    return modelList;
}

public void CopyDatabaseFromAssests() throws IOException{
    InputStream myInput = mCtx.getAssets().open(DATABASE_NAME);
    String outFile = getDatabasePath();

    File f = new File(mCtx.getApplicationInfo().dataDir + DB_PATH_SUFFIX);
    if (!f.exists())
        f.mkdir();

    OutputStream myOutPut = new FileOutputStream(outFile);

    byte[] buffer = new byte[1024];
    int lenght;
    while ((lenght = myInput.read(buffer))>0){
        myOutPut.write(buffer,0,lenght);
    }
    myOutPut.flush();
    myOutPut.close();
    myInput.close();
}

private static String getDatabasePath() {
    return mCtx.getApplicationInfo().dataDir + DB_PATH_SUFFIX
            + DATABASE_NAME;
}

public SQLiteDatabase openDatabase() throws SQLiteException{
    File dbFile = mCtx.getDatabasePath(DATABASE_NAME);
    if (!dbFile.exists()){
        try {
            CopyDatabaseFromAssests();
            Toast.makeText(mCtx,"copied from assest",Toast.LENGTH_LONG).show();
        }catch (IOException e){
            throw new RuntimeException("error occured",e);
        }
    }
    return SQLiteDatabase.openDatabase(dbFile.getPath(),null,SQLiteDatabase.NO_LOCALIZED_COLLATORS | SQLiteDatabase
    .CREATE_IF_NECESSARY);
}

@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {

}

@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

 }
}

Я впервые использую базу данных SQLite.

1 Ответ

0 голосов
/ 20 мая 2019

вы должны записать код создания таблицы в метод onCreate,

@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {

 sqLiteDatabase.execSQL("create table "+DataBaseConstants.TABLE_NAME_APPCONFIG + "(id integer primary key AUTOINCREMENT, responseData text NOT NULL,createdDate text NOT NULL)");

}

, и вы должны написать метод onUpgrade, этот метод используется для сравнения вашей предыдущей и текущей версии базы данных и обновления таблицы в соответствии сдо,

 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    if (oldVersion < newVersion) {
        db.execSQL("DROP TABLE " + "write your table name here");
        onCreate(db);
    }
}
...