Из класса 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));
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Допустим у нас есть код:
Задача: осуществить поиск по словамНапример, есть слово strong (это первый массив), а есть armstrong (это второй массив)