Проблема с типом базы данных SQL - PullRequest
0 голосов
/ 14 июня 2011

Я пытаюсь собрать базу данных SQL, но на самом деле не знаю, как заставить ее работать.Намерение состоит в том, чтобы иметь несколько столбцов, некоторые с целыми числами, некоторые со строками в своих ячейках.Для этого приложения я хочу, чтобы повторения были целым числом, а упражнение - строкой.Вот соответствующие части кода:

public static final String KEY_ROWID = "_id";
public static final String KEY_DATE = "date";
public static final String KEY_EXERCISE = "exercise";
public static final String KEY_REPS = "repetitions";

private static final String DATABASE_CREATE = "create table " + DATABASE_TABLE + " (" 
    + KEY_ROWID + " integer primary key autoincrement, "
    + KEY_DATE + " text not null, " 
    + KEY_EXERCISE + " text not null, "
    + KEY_REPS + " int not null, "

public long createExercise(String exercise, int reps) {
    ContentValues initialValues = new ContentValues();
    initialValues.put(KEY_DATE, date);
    initialValues.put(KEY_EXERCISE, exercise);
    initialValues.put(KEY_REPS, reps);

return mDb.insert(DATABASE_TABLE, null, initialValues);
}

Я помещаю данные в эту таблицу, используя тестовые строки.Затем я пытаюсь получить данные с помощью следующего запроса:

public Cursor graphQuery(String exercise, String workout) {
    return mDb.query(DATABASE_TABLE, new String[] {KEY_DATE, KEY_REPS}, null, null,    
        null, null, null);

Оттуда я пытаюсь поместить данные в массив чисел, но это дает мне ошибку.Он говорит мне поставить KEY_REPS как число, когда я объявил это.Но если я объявляю KEY_REPS как число, это не позволяет мне строить свои базы данных.

Cursor cursor = mDbHelper.graphQuery(currentexercise, currentworkout);
startManagingCursor(cursor);
Number[] reps = new Number[]{workoutDbAdapter.KEY_REPS};  //error here

Я чувствую, что мне не хватает ключевой части в создании моей базы данных.Может ли кто-нибудь помочь?

Код из книги, которой я пытаюсь следовать (кроме использования целых чисел) (из комментария к первому ответу)

private void fillData() {
    Cursor remindersCursor = mDbHelper.fetchAllReminders();
    startManagingCursor(remindersCursor);
// Create an array to specify the fields we want (only the TITLE)
    String[] from = new String[]{RemindersDbAdapter.KEY_TITLE};

При этом, если кто-то знает хороший сайтэто учит SQLite, как это применимо к Android, что было бы здорово.Единственные, что мне удалось найти, - это общие SQL-сайты, и они не очень полезны.

1 Ответ

2 голосов
/ 14 июня 2011
Cursor cursor = mDbHelper.graphQuery(currentexercise, currentworkout);
startManagingCursor(cursor);
Number[] reps = new Number[]{WorkoutDbAdapter.KEY_REPS};  //error here

Этот код не делает то, что (я думаю) вы хотите.Вам нужно перебрать курсор и получить данные оттуда.Я уверен, что если вы следовали примеру кода Android для использования баз данных, WorkoutDbAdapter.KEY_REPS является строковой константой, содержащей имя столбца reps.

Попробуйте сделать что-то вроде этого:

List<Number> allReps = new ArrayList<Number>();
Cursor cursor = mDbHelper.graphQuery(currentexercise, currentworkout);
while (cursor.moveToNext()) {
    int reps = cursor.getInt(cursor.getColumnIndexOrThrow(mDbHelper.KEY_REPS));
    allReps.add(reps);
}
Number[] repsArray = allReps.toArray(new Number[]{});
// do stuff with repsArray and don't forget to close cursor
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...