2015-11-09 7 views
0

У меня возникли серьезные проблемы с попыткой заставить SQLite работать с Android. Я продолжаю получать ошибки, такие как "Неизвестная ошибка (код 14): Не удалось открыть базу данных".Удаление базы данных SQLite перед открытием новой базы данных

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

File DB_PATH = getApplicationContext().getDatabasePath("test.db"); 
DB_PATH.mkdirs(); 

DatabaseHelper dbh = DatabaseHelper.getHelper(this); 
SQLiteDatabase db; 

SQLiteDatabase.deleteDatabase(DB_PATH); 
db = dbh.getWritableDatabase(); 

DatabaseHelper

public DatabaseHelper(Context ctx) { 
    super(ctx, ctx.getApplicationContext().getDatabasePath("test.db").getPath(), null, 10); 
    this.context = ctx; 
} 

public static synchronized DatabaseHelper getHelper(Context context) { 
    if (instance == null) { 
     instance = new DatabaseHelper(context); 
    } 

    return instance; 
} 

Что мне интересно, почему бы удалить базу данных внести изменения и какие-либо рекомендации в целом будут оценены?

+0

Не могли бы вы опубликовать код DatabaseHelper? неясно, что он делает. – Aegis

+0

@Aegis жаль, что я забыл включить его. Это сейчас – PriestVallon

+0

Возможно, сначала попробуйте использовать SQLiteOpenHelper, который обрабатывает создание и обновление базы данных, также вам не нужно указывать путь к базе данных, поскольку она всегда должна быть создана внутри каталога приложения. Методы getWritableDatabase() и getReadableDatabase автоматически создадут для вас базу данных, если она не существует. – Aegis

ответ

0

Попробуйте использовать этот шаблон

public class MyDBHelper extends SQLiteOpenHelper { 

    private static final String DATABASE_NAME = "myDatabase.db"; 
    private static final int SCHEMA = 1; 
    private static volatile MyDBHelper sInstance; 


    private MyDBHelper(Context context) { 
     super(context, DATABASE_NAME, null, SCHEMA); 
    } 

    public static MyDBHelper getInstance(Context context) { 
     if (sInstance == null) { 
      synchronized (MyDBHelper.class) { 
       if (sInstance == null) { 
        sInstance = new MyDBHelper(context.getApplicationContext()); 
       } 
      } 
     } 
     return sInstance; 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     // create your tables here 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // handle db upgrade or leave blank 
    } 
} 
Смежные вопросы