Создание базы данных SQLite для приложения Android - PullRequest
2 голосов
/ 23 сентября 2010

Я создаю базу данных SQLite для моего приложения во время выполнения, если она не существует, и вставляю строки, если она существует. Так как он должен быть создан во время выполнения, и я реализовал его, создав подкласс SQLiteOpenHelper и переопределив метод onCreate () -

«Нужно ли что-нибудь помещать в папку / assets моего проекта?»

Я не использую контент-провайдера «Нужно ли добавлять какие-либо теги в AndroidManifest.xml?»

Вот что я сделал. Строки были определены правильно, и я не получаю никаких исключений времени выполнения.

Реализация подкласса SQLiteOpenHelper.

public class MyDB extends SQLiteOpenHelper {

                   public MyDB(Context context) {
                    super(context, DATABASE_NAME, null,  DATABASE_VERSION );
                   }

                @Override
                public void onCreate(SQLiteDatabase db) {
                db.execSQL(USERAUTH_TABLE_CREATE);
                db.execSQL(USERPREF_TABLE_CREATE); 
                }

                @Override
                public void onUpgrade(SQLiteDatabase db, int oldVersion, int 
                newVersion) {
                    Log.w("Example", "Upgrading database, this will drop tables and
                    recreate.");
                    db.execSQL("DROP TABLE IF EXISTS " +  USERAUTH_TABLE_NAME);
                    db.execSQL("DROP TABLE IF EXISTS " +  USERPREF_TABLE_NAME);
                    onCreate(db);
               }

}

Здесь я создаю экземпляр подкласса MyDB в SQLiteOpenHelper.

MyDB tdb = new MyDB(Activity.this); 
SQLiteDatabase db = tdb.getReadableDatabase();

Все работает, и когда я иду в оболочку sqlite и пишу следующий запрос

select * from table_name - это просто говорит мне, что такой записи не существует. Я установил точки останова, и кажется, что после вызова getReadableDatabase () метод @Override OnCreate () никогда не выполняется, и именно здесь я выполняю SQL-таблицы Create table. Я пробовал getWritableDatabase () также.

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

Спасибо.

Текстовая строка запроса # 1

частная статическая конечная строка USERAUTH_TABLE_CREATE = "CREATE TABLE" + USERAUTH_TABLE_NAME + "(" + "число INTEGER NOT NULL" + "ОГРАНИЧИТЬ ТЕКСТ НЕ НУЛЬ", + "E-mail ТЕКСТ НЕ НУЛЬ", + "ТЕКСТ НЕТ НУЛЬ", + "flag INTEGER" + ");" ;

Текстовая строка запроса # 2

private static final String USERPREF_TABLE_CREATE = 
 "CREATE TABLE " + USERPREF_TABLE_NAME + " (" +
 "tpd TEXT NOT NULL ," +
 "cat TEXT NOT NULL" + ");";

Ответы [ 5 ]

3 голосов
/ 23 сентября 2010

Если onCreate() не вызывается, значит, база данных уже создана для вашего приложения. Самый быстрый способ решить эту проблему - удалить проект в эмуляторе («Настройки» -> «Приложения» -> «Ваше приложение»), а затем перезапустить приложение. В качестве альтернативы вы можете использовать ADB, чтобы просто отбросить базу данных - решать только вам. Перезапуск приложения после удаления базы данных вызовет onCreate(), поскольку база данных не существует, и тогда будет запущено создание таблицы sql. onCreate() вызывается только в том случае, если ваша база данных не существует (так что почти в первый раз вы вызываете базу данных в своем коде.

1 голос
/ 23 сентября 2010

«Нужно ли что-нибудь помещать в папку / assets моего проекта?»

нет

Нет

«Нужно ли добавлять какие-либо теги в AndroidManifest.xml?»

нет

Нет

Ваш синтаксис в порядке ... Не могли бы вы вставить запрос, который вы делаете для создания таблиц?

0 голосов
/ 31 июля 2012

Это простое приложение создаст базу данных и 1 таблицу w, а в конце

получит значение, которое вы указали, и которое будет показано в textBox.

0 голосов
/ 24 сентября 2010

Проблема решена. Код снова работал полностью. Оболочка sqlite не показывала мне таблицы и базу данных. Когда я продолжил работу моего приложения на эмуляторе и перешел к данным> data> your-package-name> database> your-database-file с помощью DDMS, система показала, что БД SQLite была создана нормально. Я проверил, есть ли там таблицы.

Спасибо всем, ребята !!

0 голосов
/ 23 сентября 2010

Это может быть глупый вопрос, но вы определили переменные DATABASE_NAME и DATABASE_VERSION?

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