簡體   English   中英

Android sqlite創建數據庫錯誤

[英]Android sqlite creating database error

我是android sqlite數據庫的新手。 現在我只是嘗試創建我的自定義數據庫管理器,我在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);

}

錯誤日志Cat

一些事情可能是錯的。 您的數據庫確實存在於資源/資產中嗎? 你在寫正確的目錄嗎? 逐步調試調試器將大大有助於診斷問題。

您可以通過讓copyDatabase獲取String參數(可能是this.getReadableDatabase().getPath()來進行健全性檢查。 您甚至可以嘗試將其寫入日志以查看是否正在寫入正確的數據庫目錄。

幾件事情無法檢查。 1.在方法checkDataBaseOPEN_READONLY模式打開數據庫。 2.這是非常重要的檢查,數據庫的大小小於1 MB。 3.0之前的Android版本不允許超過1 MB的文件副本。

更新:您需要將數據庫文件拆分為1Mb的部分,逐個復制所有部分並再次將它們連接在一起。 請參閱以下鏈接

除非你沒有提出所有代碼,否則在我看來你錯過了一些事情。 我使用本教程並沒有問題

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

希望有所幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM