Android: sqlite - нет такого исключения таблицы - PullRequest
0 голосов
/ 13 сентября 2011

У меня есть следующий код (я упростила его и удалила ненужные части)

public class MyDatabaseManager extends SQLiteOpenHelper {

    private SQLiteDatabase myDatabase;

    public DatabaseManager() {
    super(MyApp.getAndroidContext(), DATABASE_NAME, null, DATABASE_VERSION);

    myDatabase = getWritableDatabase();
    }

    @Override
    public void onCreate(SQLiteDatabase database) {

    database.execSQL("create table t1 (t1key INTEGER PRIMARY KEY,data TEXT,num REAL,timeEnter NUMERIC);");

    }

    @Override
    public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) {
    }

}

Теперь, когда я запускаю запросы к этой базе данных, я получаю sqlite - no such table exception.

Моя точка останова на database.execSQL достигает, и она не вызывает никаких исключений (например, если я изменяю код на database.execSQL("asda"), я получаю исключение синтаксической ошибки), поэтому я думаю, что мой код SQL правильный. Пока таблица не создана. Я скопировал файл базы данных на свой компьютер и посмотрел его с помощью браузера Sqlite, и там действительно нет моих таблиц. Существует только одна таблица, и она называется android_metadata. Есть идеи?

Ответы [ 4 ]

2 голосов
/ 13 сентября 2011

У Sqlite нет типа данных для DATE.Я бы предложил заменить его на INTEGER и сохранить в нем date.getTime ().

1 голос
/ 13 сентября 2011

Попробуйте передать контекст при создании экземпляра менеджера, изменив конструктор следующим образом:

public MyDatabaseManager(Context ctx) {
 super(ctx, DATABASE_NAME, null, DATABASE_VERSION);
}

public openDB() throws SQLException
{
 myDatabase = getWritableDatabase; 
}

Теперь передайте getApplicationContext () новому экземпляру MyDatabaseManager в onCreate () действия:

MyDatabaseManager manager = new MyDataBaseManager(getApplicationContext());
manager.openDB();
1 голос
/ 13 сентября 2011

Измените свой запрос и попробуйте что-то вроде:

create table t1 (_id INTEGER PRIMARY KEY AUTOINCREMENT, data TEXT,num REAL,timeEnter NUMERIC);

должен быть столбец _id в таблице базы данных Android Sqlite, и лучше, чтобы он был autoincrement.

0 голосов
/ 13 сентября 2011

Хорошо, я исправил проблему. Было несколько проблем:
1) Мой запрос на создание таблицы имел проблемы
2) Я программно копировал файл базы данных на SD-карту в конце onCreate и, видимо, там он еще не был записан. Я переместил его прямо под myDatabase = getWritableDatabase(); , и это сработало.

Спасибо всем за помощь.

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