2011-03-15 2 views
0

Я новичок в базе данных android sqlite. теперь я просто пытаюсь создать свой пользовательский менеджер баз данных, и я получил ошибку в функции oncreate(). Я уже потратил 3 дня, чтобы понять это, но, к сожалению, я все еще застрял в нем. Любая блестящая идея была бы оценена.Android sqlite создание ошибки базы данных

public class DBManager extends SQLiteOpenHelper { 
private SQLiteDatabase db; 
private static Context myContext; 
public static final String DB_NAME = "goldenland.db"; 
public static final String TB_CAT = "tbl_categories"; 
public static final String TB_ARTICLE = "tbl_articles"; 
public static final String TB_SUBCAT = "tbl_subcategories"; 
public static final String TB_SCHEDULE = "tbl_schedule"; 
public static final String TB_CONTENT = "tbl_contents"; 
public static final String TB_CITY = "tbl_cities"; 
public static final String name = "name"; 
public static String DB_PATH = "/data/data/com.gokiri.goldenland/databases/"; 

public DBManager(Context context) { 
    super(context, DB_NAME, null, 1); 
    DBManager.myContext = context; 
} 

public void createDataBase() throws IOException { 
    boolean dbExit = checkDataBase(); 

    if (dbExit) { 
     System.out.println("Testing"); 
    } else { 
     this.getReadableDatabase(); 

     try { 
      copyDataBase(); 

     } catch (IOException e) { 
      throw new RuntimeException(e.getMessage()); 

     } 
    } 
} 

private boolean checkDataBase() { 
    SQLiteDatabase checkDb = null; 

    try { 
     String myPath = DB_PATH + DB_NAME; 

     checkDb = SQLiteDatabase.openDatabase(myPath, null, 
       SQLiteDatabase.OPEN_READWRITE); 
    } catch (SQLException e) { 

    } 

    if (checkDb != null) { 
     checkDb.close(); 
    } 
    return checkDb != null ? true : false; 
} 

public void copyDataBase() throws IOException { 

    InputStream myInput = myContext.getAssets().open("goldenland_2.sqlite"); 

    String outFileName = DB_PATH + DB_NAME; 
    OutputStream myOutput = new FileOutputStream(outFileName); 

    byte[] buffer = new byte[1024]; 
    int length; 
    while ((length = myInput.read(buffer)) > 0) { 
     myOutput.write(buffer, 0, length); 
    } 
    myOutput.flush(); 
    myOutput.close(); 
    myInput.close(); 
} 

public void openDatabase() throws SQLiteException { 

    String myPath = DB_PATH + DB_NAME; 
    db = SQLiteDatabase.openDatabase(myPath, null, 
      SQLiteDatabase.OPEN_READWRITE); 

} 

Error Log Cat

+0

Вы не должны статически сохранять контексты. Если вы получите доступ к этому коду из нескольких действий, это, скорее всего, приведет к сбою. –

+0

так как я могу использовать этот код из нескольких действий. Имеет ли отношение к доступу к чтению/записи телефона? – geekmyo

ответ

1

Несколько вещей, которые могут быть ошибочными. Действительно ли ваша база данных существует в res/assets? Вы пишете в правильный каталог? Переход с помощью отладчика будет иметь большое значение для диагностики проблемы.

Вы можете получить проверку на предмет соответствия, указав copyDatabase аргумент String, который будет this.getReadableDatabase().getPath(). Возможно, вы даже попытаетесь записать это в журнал, чтобы узнать, записываете ли вы в правильный каталог базы данных.

0

, если вы не Didnt поставить весь код, мне кажется, что вам не хватает Somethings. Я использовал этот учебник и не было никаких проблем

http://www.devx.com/wireless/Article/40842/1954

надежду, что помогает

1

Немного вещей для проверки. 1. в методе checkDataBase открыть базу данных в OPEN_READONLY режиме. 2. Это очень важно проверить, что размер базы данных меньше 1 мб. Версия Android, предшествующая версии 3.0, не позволяет копировать файл более 1 мб.

Update: Вам нужно будет разбить файл базы данных в части 1Мб каждого, скопировать все его части по одному и присоединиться к ним снова вместе. см. ниже: link

+0

мой размер файла базы данных больше 1 МБ, и теперь я работаю над Android 2.1 на основе любой идеи? – geekmyo

+0

проверить мой обновленный ответ. –

+0

Ваш ответ полезен. вы просто спасли мое время. благодаря – geekmyo

Смежные вопросы