Android sqlite создает ошибку базы данных - PullRequest
0 голосов
/ 15 марта 2011

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

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

Ответы [ 3 ]

1 голос
/ 15 марта 2011

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

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

1 голос
/ 15 марта 2011

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

Обновление: Вам потребуется разделить файл базы данных на части по 1 МБ каждая, скопировать все части по одной и снова объединить их.см. следующую ссылку

0 голосов
/ 15 марта 2011

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

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

надеюсь, что помогает

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