Создание начальной базы SQLiteDatabase при установке приложения - PullRequest
1 голос
/ 22 июня 2010

Я пишу приложение, которое отображает забавные факты (и источник, из которого они).Пользователь может просматривать факты один за другим.

Вот конструкция, о которой я подумал:
Создайте таблицу в SQLiteDatabase с текстовым столбцом, в котором хранится интересный факт, и вторым столбцом, в котором хранится его источник.(не уверен, что это лучший способ сделать это, но я хочу, чтобы приложение было доступно даже без сети)

Мой вопрос: когда база данных изначально создается на устройстве, нужно ли мне заполнять вручнуюбазы данных из кода, что-то вроде этого псевдокода: -

    @Override
public void onCreate(SQLiteDatabase db) {

    //Create the table

    //Populate the table
        //Insert statement 1
        //Insert statement 2
        //Insert statement 3
                          ...
        //Insert statement 500

}

Конечно, должен быть лучший способ для создания начальной базы данных, когда приложение установлено?

Ответы [ 2 ]

2 голосов
/ 22 июня 2010

Вы уверены, что вам действительно нужна база данных? Разве это не добавляет ненужных накладных расходов к чему-то столь тривиальному?

Разве вы не можете просто объявить массив в своем коде, или я что-то упустил? Будь то в БД или в вашем коде, он занимает место. БД добавит к этому некоторые накладные расходы, а vious - потребуется некоторое время для загрузки, плюс ваш код должен обрабатывать ошибки и т.д.

Неужели вам не лучше с простым массивом, объявленным в вашем коде? Или я что-то упускаю из виду? (может быть, пользователи могут добавить новую базу данных? Но неужели это намного сложнее, чем новая программа?)

Если я далеко, пожалуйста, объясните (вместо того, чтобы понизить голосование). Я пытаюсь помочь


Редактировать: возможно, у вас уже есть факты? Может быть, в текстовом файле? Вы можете просто написать код для его анализа и инициализации и массива (или заполнить БД). В основном это должно быть короткое замыкание.

1 голос
/ 22 июня 2010

используйте класс, полученный из SQLiteOpenHelper

Я уже писал об этом в моем блоге www.xenonite.net

public class myDatabase extends SQLiteOpenHelper
{
    private static final String     DB_NAME     = "database.db";
    private static final int    DB_VERSION  = 1;

    public MyDatabase(Context context)
    {
        super(context, DB_NAME, null, DB_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db)
    {
        db.execSQL("CREATE TABLE tbl_test ( id INTEGER PRIMARY KEY AUTOINCREMENT, test TEXT NOT NULL )");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
    {
        db.execSQL("DROP TABLE IF EXISTS tbl_test");
        onCreate(db);
    }
}

Вы можете использовать это как

myDatabase db = new myDatabase(getApplicationContext());

sql = "INSERT INTO tbl_test (test) VALUES ('xyz')";
db.getWritableDatabase().execSQL(sql);

String sql = "SELECT id FROM tbl_test"; 
Cursor result = db.getWritableDatabase().rawQuery(sql, null);

int value;

while(result.moveToNext())
{
        value = result.getInt(0);
}

при каждом вызове db вызывается myDatabase.onCreate (), поэтому ваша база данных будет создана при первом запуске.при изменении структуры таблицы реализуйте onUpgrade () и увеличивайте DB_VERSION

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...