2012-05-23 2 views
0

У меня есть база данных с несколькими таблицами. Одна из этих таблиц (спорт) - это то место, где я должен поставить статический список объектов, каждый из которых имеет _id, name, logo и int. _id будет использоваться другими таблицами для выполнения некоторых запросов (например, выбрать из «таблицы X», где sport_id = _id), поэтому он не должен изменять сверхурочную работу (есть ли способ обновить всю ссылку на этот _id, если он будет изменение?). Где я должен поместить код (я думаю, что это будет простой список db.insertSport()), чтобы добавить эту строку только один раз (и проверить, растет ли число строк, чтобы добавить новые)? Не будет большого количества строк, 50 в лучшем случае.Заполнение SQLiteDatabase в Android со статическими данными

+0

«(это есть способ обновить всю ссылку на этот _id, если он изменится?) «Не меняйте идентификатор. Это плохая практика базы данных, чтобы иметь уникальное изменение идентификатора. –

+0

Это было в том случае, когда по каким-то причинам (неизвестно мне) _ids меняются. Как я могу автоматически изменить ссылку на эту таблицу в других таблицах? (это вопрос sqlite noob) –

+0

Глядя на ответ ниже, ответ Барака хорош. Вы действительно не сможете автоматически изменить ссылку, поэтому, чтобы вы не беспокоились об изменении идентификатора в первую очередь, создайте уникальный индекс в столбце таблицы Name. Затем, с предложением Барака, используйте функцию игнорирования вставки db.execSQL («СОЗДАТЬ УНИКАЛЬНЫЙ ИНДЕКС РАЗЛИЧНОГО НА спорт (имя)»); Что-то в этом роде, у меня нет приложения SQLite или Android, чтобы протестировать его прямо сейчас, так что вам может понадобиться немного его настроить. –

ответ

0

Я думаю, что я бы сделал метод в dbHelper, чтобы вставить эти данные, а затем вызовите этот метод сразу после запуска приложения. Я делаю несколько предположений здесь ... сначала, что вы отправляете эту статическую информацию с приложением, и когда вы хотите добавить дополнительную информацию, вы будете отправлять новую версию.

Вы можете сохранить данные в виде текстового файла в папке с вашими активами, а затем прочитать файл в исполняемом пакете в методе.

Если вы установите его право (используйте insertWithOnConflict и CONFLICT_IGNORE флаг в методе) будет только добавлять новые строки (если таковые имеются) каждый раз, так что вы можете запустить его каждый раз при запуске приложения и не беспокоиться о дубликата данных или сбоев за нарушения ограничений.

Если вы хотите, чтобы он запускался один раз, а затем снова, когда есть дополнительная информация, поместите номер версии в текстовый файл и проверьте его на предыдущий (который вы можете сохранить в SharedPreferences).

РЕДАКТИРОВАТЬ

Пример использования insertWithOnConflict:

public long createItem(String yourdata) { 
    ContentValues initialValues = new ContentValues(); 
    initialValues.put(YOUR_COLUMN, yourdata); 
    return mDb.insertWithOnConflict(YOUR_TABLE, null, initialValues, 
      SQLiteDatabase.CONFLICT_IGNORE); 
} 

Вы можете прочитать о классе SQLiteDatabase (который имеет константы и методы) here

+0

ВставитьWithOnConflict - лучшее решение. Я не знаю, куда его поместить. В первом действии приложения? Или MAYBE в onCreate() базы данных? –

+0

Вы должны использовать его в методе в классе dbHelper. Я отредактировал свой ответ, чтобы дать вам толчок в правильном направлении. – Barak

+0

Хорошо, извините, я уже добрался до этой части, я не понимаю, когда звонить createItem(). Внутри SQLiteOpenHelper onCreate() хорошо? –

Смежные вопросы