Я создал базу данных sqlite для хранения списков воспроизведения для мультимедийного проигрывателя, который я разрабатываю из-за расширенной функции (а не использования Content Provider).Он отлично работает на эмуляторе 1.6, но FC на чем-то выше 2.0 ... что изменилось, о чем мне нужно знать, если открыть базы данных в SDK 2.0+?Вот logcat.
08-06 19: 05: 46.365: INFO / SQLiteDatabaseAdapter (4692): БД (playlists.db) скопирована!08-06 19: 05: 46.373: INFO / SQLiteDatabaseAdapter (4692): попытаться создать экземпляр базы данных (playlists.db) 08-06 19: 05: 46.373: INFO / SQLiteDatabaseAdapter (4692): создать или открыть базу данных: списки воспроизведения.дБ 08-06 19: 05: 46.389: INFO / SQLiteDatabaseAdapter (4692): создан экземпляр базы данных (playlists.db)!08-06 19: 05: 46.389: INFO / База данных (4692): возвращен sqlite: код ошибки = 1, msg = нет такой таблицы: список воспроизведения 08-06 19: 05: 46.397: DEBUG / AndroidRuntime (4692): выключение виртуальной машины08-06 19: 05: 46.397: WARN / dalvikvm (4692): threadid = 1: поток завершается с необработанным исключением (group = 0x4001d7e0) 08-06 19: 05: 46.514: ERROR / AndroidRuntime (4692): FATAL EXCEPTION: main08-06 19: 05: 46.514: ОШИБКА / AndroidRuntime (4692): java.lang.RuntimeException: не удается запустить действие ComponentInfo {com.androidworkz.andamp / com.androidworkz.andamp.andAMP}: android.database.sqlite.SQLiteException: нет такой таблицы: список воспроизведения:, при компиляции: SELECT список воспроизведения. * ИЗ списка воспроизведения ORDER BY id ASC;08-06 19: 05: 46.514: ОШИБКА / AndroidRuntime (4692): на android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2663) 08-06 19: 05: 46.514: ОШИБКА / AndroidRuntime (4692): на андроид.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2679) 08-06 19: 05: 46.514: ОШИБКА / AndroidRuntime (4692): на android.app.ActivityThread.access $ 2300 (ActivityThread.java:125) 08-06 19:05: 46.514: ОШИБКА / AndroidRuntime (4692): на android.app.ActivityThread $ H.handleMessage (ActivityThread.java:2033) 08-06 19: 05: 46.514: ОШИБКА / AndroidRuntime (4692): на android.os.Handler.dispatchMessage (Handler.java:99) 08-06 19: 05: 46.514: ОШИБКА / AndroidRuntime (4692): на android.os.Looper.loop (Looper.java:123) 08-06 19: 05: 46.514: ОШИБКА /AndroidRuntime (4692): на android.app.ActivityThread.main (ActivityThread.java:4627) 08-06 19: 05: 46.514: ОШИБКА / AndroidRuntime (4692): на java.lang.reflect.Method.invokeNative (собственный метод)08-06 19: 05: 46.514: ОШИБКА / AndroidRuntime (4692): в java.lang.reflect.Method.invoke (Method.java:521) 08-06 19: 05: 46.514: ОШИБКА / AndroidRuntime (4692): на com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:868) 08-06 19: 05: 46.514: ОШИБКА / AndroidRuntime (4692):в com.android.internal.os.ZygoteInit.main (ZygoteInit.java:626) 08-06 19: 05: 46.514: ОШИБКА / AndroidRuntime (4692): в dalvik.system.NativeStart.main (собственный метод) 08-0619: 05: 46.514: ОШИБКА / AndroidRuntime (4692): вызвано: android.database.sqlite.SQLiteException: нет такой таблицы: playlist:, при компиляции: SELECT playlist. * ИЗ списка воспроизведения ORDER BY id id ASC;08-06 19: 05: 46.514: ОШИБКА / AndroidRuntime (4692): в android.database.sqlite.SQLiteCompiledSql.native_compile (собственный метод) 08-06 19: 05: 46.514: ОШИБКА / AndroidRuntime (4692): в android.database.sqlite.SQLiteCompiledSql.compile (SQLiteCompiledSql.java:91) 08-06 19: 05: 46.514: ОШИБКА / AndroidRuntime (4692): в android.database.sqlite.SQLiteCompiledSql. (SQLiteCompiledSql.java:64) 08-06 19:05: 46.514: ОШИБКА / AndroidRuntime (4692): в android.database.sqlite.SQLiteProgram. (SQLiteProgram.java:80) 08-06 19: 05: 46.514: ОШИБКА / AndroidRuntime (4692): в android.database.sqlite.SQLiteQuery. (SQLiteQuery.java:46) 08-06 19: 05: 46.514: ОШИБКА / AndroidRuntime (4692): в android.database.sqlite.SQLiteDirectCursorDriver.query (SQLiteDirectCursorDriver.java:42) 08-06 19: 05: 46.514: ОШИБКА / AndroidRuntime (4692): в android.database.sqlite.SQLiteDatabase.rawQueryWithFactory (SQLiteDatabase.java:1345)08-06 19: 05: 46.514: ОШИБКА / AndroidRuntime (4692): в android.database.sqlite.SQLiteDatabase.rawQuery (SQLiteDatabase.java:1315) 08-06 19: 05: 46.514: ОШИБКА / AndroidRuntime (4692): вcom.androidworkz.andamp.objects.Playlist.getPlaylists (Playlist.java:75) 08-06 19: 05: 46.514: ОШИБКА / AndroidRuntime (4692): в com.androidworkz.andamp.andAMP.onCreate (andAMP.java:353) 08-06 19: 05: 46.514: ОШИБКА / AndroidRuntime (4692): на android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1047) 08-06 19: 05: 46.514: ОШИБКА / AndroidRuntime (4692): на андроид.app.ActivityThread.performLaunchActivity (ActivityThread.java:2627) 08-06 19: 05: 46.514: ОШИБКА / AndroidRuntime (4692): ... еще 11
Вот класс dbhelper
package com.androidworkz.andamp;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
public class DBHelper extends SQLiteOpenHelper {
// Android's default system path for your application's database.
private static String DB_PATH = "/data/data/com.androidworkz.andamp/databases/";
private static String DB_NAME = "playlists.db";
public DBHelper(Context context) {
super(context, DB_NAME, null, 1);
if (!checkDataBaseExistence()) {
createDatabase();
}
}
public void onCreate(SQLiteDatabase db) {
// Leave this method empty
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// fill in your code here
}
public void createDatabase() {
SQLiteDatabase db = null;
String dbPath = DB_PATH + DB_NAME;
db = SQLiteDatabase.openDatabase(dbPath, null, SQLiteDatabase.CREATE_IF_NECESSARY);
db.close();
db = SQLiteDatabase.openDatabase(dbPath, null, SQLiteDatabase.OPEN_READWRITE);
db.execSQL("CREATE TABLE [playlist] ("+
"[id] INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,"+
"[name] VARCHAR(255) NULL);)");
db.execSQL("CREATE TABLE [songs] ("+
"[id] INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,"+
"[playlistId] INTEGER NULL,"+
"[songId] INTEGER NULL,"+
"[name] VARCHAR(255) NULL,"+
"[key] VARCHAR(255) NULL,"+
"[duration] INTEGER NULL,"+
"[path] VARCHAR(255) NULL,"+
"[artistName] VARCHAR(255) NULL,"+
"[artistKey] VARCHAR(255) NULL,"+
"[albumId] INTEGER NULL,"+
"[albumName] VARCHAR(255) NULL,"+
"[albumKey] VARCHAR(255) NULL);");
db.close();
}
private boolean checkDataBaseExistence() {
// database to be verified
SQLiteDatabase dbToBeVerified = null;
try {
// get database path
String dbPath = DB_PATH + DB_NAME;
// try to open the database
dbToBeVerified = SQLiteDatabase.openDatabase(dbPath, null,
SQLiteDatabase.OPEN_READONLY);
} catch (SQLiteException e) {
// do nothing since the database does not exist
}
// in case it exists, close it
if (dbToBeVerified != null) {
// close DB
dbToBeVerified.close();
}
// in case there is a DB entity, the DB exists
return dbToBeVerified != null ? true : false;
}
}
Боже, как же я ненавижу этот глупый "ввод кода здесь" ... почему не может использовать stackoverflow просто использовать теги, как обычный подсветчик синтаксиса.