Это всего лишь предположение, но я вижу, что здесь происходят три возможные вещи ...
- Вызов
this.getReadableDatabase()
в вашем методе createDatabase()
автоматически создает пустую базу данных.
- Ваша попытка скопировать предварительно созданную базу данных из папки
assets
не удалась или база данных копируется в неправильное место.
- Пустая база данных, созданная на шаге 1 (выше), запрашивается при вызове
db.rawQuery(...)
из основного кода.
Для дальнейшего объяснения полезно взглянуть на источник для SQLiteOpenHelper
Когда вы создаете экземпляр SQLiteOpenHelper
, он устанавливает такие вещи, как имя и версию базы данных, но не создает базу данных. Вместо этого при первом вызове getReadableDatabase()
или getWritableDatabase()
проверяется, существует ли база данных, и если она не создает ее. После создания пустой базы данных вызывается метод onCreate(...)
, который в вашем случае ничего не делает.
Перейдите к пункту 2 (выше) - вы говорите, что DB_PATH
- это /data/data/mypackagename/databases
. Если это действительно так, и у вас нет трейлинга /
, тогда строка ...
String myPath = DB_PATH + DB_NAME;
... установит myPath
в /data/data/mypackagename/databasesligas_db
. В этом случае, даже если копия из assets
завершится успешно, скопированная база данных не будет там, где вы ожидаете.
Наконец, в пункте 3 (выше), когда вы вызываете db.rawQuery(...)
, экземпляр, на который указывает db
, возвращается предыдущим вызовом getWritableDatabase()
. Предполагая, что копия из assets
не удалась или что она была скопирована по неверному пути, db
будет указывать на пустую базу данных, созданную на шаге 1.
Ошибка, которую вы получаете, состоит в том, что таблица не существует, и это не ошибка, указывающая на то, что база данных не существует - единственное логическое объяснение состоит в том, что она выполняет запрос к пустой базе данных, а не к той, которая имеет было скопировано с assets
.
РЕДАКТИРОВАТЬ: Еще одна вещь, которую я хотел упомянуть. Не стоит использовать жестко закодированные пути к любому из каталогов Android. Например - хотя на большинстве устройств каталог, в котором создаются базы данных, будет /data/data/<package-name>/databases
, это не гарантия. Гораздо безопаснее, если вы вызовете метод getDatabasePath(...)
, поскольку он вернет объект File
, который можно использовать для получения пути к каталогу баз данных, используемому классами баз данных Android.