Ошибка android.database.sqlite.SQLiteException: no such table: ... (code 1 SQLITE_ERROR)

198
10 января 2022, 19:50

Есть таблица, в ней колонки:

public static final String COLUMN_ID = "_id";
    public static final String COLUMN_NUMBER = "Number";
    public static final String COLUMN_NAME = "Name";
    public static final String COLUMN_CHECKBOX = "Checkbox";
    public static final String COLUMN_PROKRUTKA = "Prokrutka";

При попытке достать значение из последнего столбца пои имени первого вылетает указанная ошибка Прочитал абсолютно все аналогичные темы на форуме, ничего не помогает. Сразу отпишусь, что все указанные столбцы в таблице есть, сама таблица есть, на приложении ее версия актуальная (приложение почистил, удалил и установил заново), кроме того, другая активность в приложении также использует значение "Prokrutka" из таблицы и там все работает. Вот код, из-за которого вылетает ошибка:

@Override
            protected void onSizeChanged(int w, int h, int ow, int oh) {
                Intent position = getIntent();
                int positionValue = position.getIntExtra("head", 0);
                sqlHelper = new DatabaseHelper(getApplicationContext());
                db = sqlHelper.getReadableDatabase();
                    String[] columns=new String[]{"_id","Prokrutka"};
                    Cursor c = db.query("ppvs", columns, "_id =?",new String[]{String.valueOf(positionValue)},null,null,null);
                    if(c.moveToFirst()){
                    prokrutka  = c.getInt(c.getColumnIndex("Prokrutka"));
                }
                super.onSizeChanged(w, h, ow, oh);
                if (getContentHeight() > 0) scrollTo(0, Integer.parseInt(String.valueOf(prokrutka)));
            }

Лог ошибки прилагаю Лог ошибки текстом Лог ошибки картинкой

class DatabaseHelper extends SQLiteOpenHelper {
    private static String DB_PATH; // полный путь к базе данных
    private static String DB_NAME = "ppvs.db";
    private static final int SCHEMA = 6; // версия базы данных
    static final String TABLE = "ppvs"; // название таблицы в бд
    // названия столбцов
    public static final String COLUMN_ID = "_id";
    public static final String COLUMN_NUMBER = "Number";
    public static final String COLUMN_NAME = "Name";
    public static final String COLUMN_CHECKBOX = "Checkbox";
    public static final String COLUMN_PROKRUTKA = "Prokrutka";
    private Context myContext;
    DatabaseHelper(Context context) {
        super(context, DB_NAME, null, SCHEMA);
        this.myContext=context;
        DB_PATH =context.getFilesDir().getPath() + DB_NAME;
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion,  int newVersion) {
    }
    void create_db(){
        InputStream myInput = null;
        OutputStream myOutput = null;
        try {
            File file = new File(DB_PATH);
            if (!file.exists()) {
                this.getReadableDatabase();
                //получаем локальную бд как поток
                myInput = myContext.getAssets().open(DB_NAME);
                // Путь к новой бд
                String outFileName = DB_PATH;
                // Открываем пустую бд
                myOutput = new FileOutputStream(outFileName);
                // побайтово копируем данные
                byte[] buffer = new byte[1024];
                int length;
                while ((length = myInput.read(buffer)) > 0) {
                    myOutput.write(buffer, 0, length);
                }
                myOutput.flush();
                myOutput.close();
                myInput.close();
            }
        }
        catch(IOException ex){
            Log.d("DatabaseHelper", ex.getMessage());
        }
    }
    public SQLiteDatabase open()throws SQLException {
        return SQLiteDatabase.openDatabase(DB_PATH, null, SQLiteDatabase.OPEN_READWRITE);
    }
}

Вот этот код гарантированно и как и задумано работает с этой же базой и этими же колонками в базе:

public void onResume() {
        super.onResume();
        try {
            db = sqlHelper.open();
            userCursor = db.rawQuery("select * from " + DatabaseHelper.TABLE, null);
            String[] headers = new String[]{DatabaseHelper.COLUMN_NAME, DatabaseHelper.COLUMN_PROKRUTKA};
            userAdapter = new SimpleCursorAdapter(this, android.R.layout.two_line_list_item,
                    userCursor, headers, new int[]{android.R.id.text1, android.R.id.text2}, 0);
            // если в текстовом поле есть текст, выполняем фильтрацию
            // данная проверка нужна при переходе от одной ориентации экрана к другой
            if(!userFilter.getText().toString().isEmpty())
                userAdapter.getFilter().filter(userFilter.getText().toString());
            // установка слушателя изменения текста
            userFilter.addTextChangedListener(new TextWatcher() {
                public void afterTextChanged(Editable s) { }
                public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
                // при изменении текста выполняем фильтрацию
                public void onTextChanged(CharSequence s, int start, int before, int count) {
                    userAdapter.getFilter().filter(s.toString());
                }
            });
READ ALSO
Выбор зарезервированного порта

Выбор зарезервированного порта

Подскажите, какой, по вашему мнению, можно выбрать порт для планируемой системы автоматического православного IT-исповеданияСуть разработки...

95
Как Можно перегрузить Оператор ==, если необходимо проверить указатель на nullptr

Как Можно перегрузить Оператор ==, если необходимо проверить указатель на nullptr

Допустим в Классе есть указатель, тогда каким образом можно его проверить на nullptrПри попытке использовать простой if( a == nullptr) выдаёт ошибку...

89
c++ подключение файлов

c++ подключение файлов

Как подключить файл если его название записано в переменной?

87