java - Android sqlite创建数据库错误

标签 java android database sqlite

我是 Android sqlite 数据库的新手。现在我只是尝试创建自定义数据库管理器,但在 oncreate() 函数中出现错误。我已经花了三天时间来解决这个问题,但不幸的是我仍然陷在其中。任何绝妙的想法将不胜感激。

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

最佳答案

有些事情可能是错误的。你的数据库真的存在于 res/assets 中吗?您正在写入正确的目录吗?使用调试器单步执行将有助于诊断问题。

您可以通过让 copyDatabase 采用 String 参数来进行完整性检查,该参数为 this.getReadableDatabase().getPath() 。您甚至可以尝试将其写入日志,以查看是否写入了正确的数据库目录。

关于java - Android sqlite创建数据库错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5307332/

相关文章:

运行测试时出现 Android/Espresso Intent 错误

arrays - 如何返回并显示保存到数据库 laravel 的 json 数据

java - 如何使用 REPLICA_SET_SECONDARY 类型对 MongoDB 服务器执行写操作?

java - 如何告诉 Hibernate 不要更新某些列

java - 调整父级大小时,如何使我的 JScrollPane 增大和缩小?

android - 渲染到纹理和轨迹不消失

用于构建 SQL 前端 GUI 的 Java 库\应用程序

android - 如何使用 volley 库访问 android 中受密码保护的 URL

java - 测试模拟类中包含的映射

java - 使用 ARM64 musl-libs 编译 OpenJDK 9 及更高版本