Я следовал онлайн-уроку, чтобы изучить 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.