Не работает cursor rawQuery Android studio

207
12 апреля 2022, 05:20

Из класса dbHelper создается таблица:

//Таблица основных данных героя
    public static final String db_MAIN_HERO = "main_hero";
        //Поля таблицы
        public static final String db_hero_id = "hero_id";
        public static final String db_hero_name = "hero_name";
        public static final String db_class_id = "class_id";
        public static final String db_class_name = "class_name";
        public static final String db_race_id = "race_id";
        public static final String db_race_name = "race_name";
        public static final String db_race_var_id = "race_var_id";
        public static final String db_race_var_name = "race_var_name";
 String SQL_CREATE_HERO_TABLE = "CREATE TABLE IF NOT EXISTS " + db_MAIN_HERO + " ("
                + db_hero_id       + " INTEGER PRIMARY KEY AUTOINCREMENT, "
                + db_hero_name     + " TEXT, "
                + db_class_id      + " INTEGER, "
                + db_class_name    + " TEXT, "
                + db_race_id       + " INTEGER, "
                + db_race_name     + " TEXT, "
                + db_race_var_id   + " INTEGER, "
                + db_race_var_name + " TEXT);";

В основном классе вызывается инсерт

 private void insertHero() {
        // Gets the database in write mode
        SQLiteDatabase db;
        db = dbHelper.getWritableDatabase();
        // Создаем объект ContentValues, где имена столбцов ключи,
        // а информация о госте является значениями ключей
        String s_init_name = "name";
        String insertQuery = "INSERT INTO " +
                dbHelper.db_MAIN_HERO +
                " (" + dbHelper.db_hero_name + ") VALUES " + "('" + s_init_name + "')";
        try {
            db.execSQL(insertQuery);
        }
        catch (SQLException e){}
    }

После вычисления переменных - апдейт:

 private void updateHero() {
        // Gets the database in write mode
        SQLiteDatabase db;
        db = dbHelper.getWritableDatabase();
        hero_id = readMaxHeroId();
        String updateQuery = "UPDATE " + dbHelper.db_MAIN_HERO +
               " SET " + dbHelper.db_hero_name + " = '" + name_hero + "', "
                + dbHelper.db_class_id + " = " + class_id + ", "
                + dbHelper.db_race_id + " = " + race_id + ", "
                + dbHelper.db_race_var_id + " = " + race_var_id + ", "
                + dbHelper.db_class_name + " = '" + name_class + "', "
                + dbHelper.db_race_name + " = '" + name_race + "', "
                + dbHelper.db_race_var_name + " = '" + name_race_var + "' "
                + "WHERE " + dbHelper.db_hero_id + " =" + hero_id;
        try {
            db.execSQL(updateQuery);
            checktest();
        }
        catch (SQLException e){ }
    }

и затем самое главное! я пытаюсь понять а что в базе то? и читаю..

 private int checktest() {
        SQLiteDatabase db;
        db = dbHelper.getReadableDatabase();
        String query = "SELECT " + dbHelper.db_hero_id + ", "
                + dbHelper.db_hero_name + ", "
                + dbHelper.db_class_id + ", "
                + dbHelper.db_class_name + ", "
                + dbHelper.db_race_id + ", "
                + dbHelper.db_race_name + ", "
                + dbHelper.db_race_var_id + ", "
                + dbHelper.db_race_var_name
                + " FROM " + dbHelper.db_MAIN_HERO
                + " WHERE " + dbHelper.db_hero_id + " = " + hero_id + ";";
        //String[] selectionArgs = {"1"};
        Cursor cursor2 = db.rawQuery(query, null);
        try{
            //for (cursor2.moveToFirst(); !cursor2.isAfterLast(); cursor2.moveToNext()) {
            cursor2.moveToFirst();
            cursor2.moveToNext();
            cursor2.moveToLast();
                int hero_id_id = cursor2.getInt(cursor2.getColumnIndex(dbHelper.db_class_id));
                int class_id_id = cursor2.getInt(cursor2.getColumnIndex(dbHelper.db_class_id));
                int race_id_id = cursor2.getInt(cursor2.getColumnIndex(dbHelper.db_race_id));
                int race_var_id_id = cursor2.getInt(cursor2.getColumnIndex(dbHelper.db_race_var_id));
                String hero_namen = cursor2.getString(cursor2.getColumnIndex(dbHelper.db_hero_name));
                String class_namen = cursor2.getString(cursor2.getColumnIndex(dbHelper.db_class_name));
                String race_namen = cursor2.getString(cursor2.getColumnIndex(dbHelper.db_race_name));
                String race_var_namen = cursor2.getString(cursor2.getColumnIndex(dbHelper.db_race_var_name));
                Toast toast = Toast.makeText(getApplicationContext(),
                        ";heroid " + hero_id_id
                                + ";heromustid" + hero_id
                                + ";heroname " + hero_namen
                                + ";classid " + class_id_id
                                + ";clasname " + class_namen
                                + ";raceid " + race_id_id
                                + ";racename " + race_namen
                                + ";racevarid " + race_var_id_id
                                + ";racevarname " + race_var_namen, Toast.LENGTH_SHORT);
                toast.show();//}
        }
        finally {
            cursor2.close();
            return(hero_id);
        }
    }

Вопрос: Почему крусор абсолютно никак не хочет работать всего с одной строкой? Если убрать фильтр курсор работает. Но хотелось бы получать одну строку состовляя запрос именно таким образом и затем обрабатывать, на любые команды moveToNext() и прочие курсору все равно, он просто ничего не делает и проваливается в катч(финалли) на первом же присвоении:

int hero_id_id = cursor2.getInt(cursor2.getColumnIndex(dbHelper.db_class_id));
READ ALSO
Ошибка java.util.InputMismatchException

Ошибка java.util.InputMismatchException

Возникла ошибка javautil

201
Hash sha-256 Java

Hash sha-256 Java

Как рациональнее преобразовать данные(строку) в хэш sha-256?

223
Как осуществить поиск по словам

Как осуществить поиск по словам

Задача: осуществить поиск по словамНапример, есть слово strong (это первый массив), а есть armstrong (это второй массив)

117