Android sqlite无法打开数据库错误14

Android sqlite无法打开数据库错误14,android,sql,sqlite,database-connection,Android,Sql,Sqlite,Database Connection,我在Sqlite工作。我在资产文件夹中有mydb.sqllite文件,我试图从资产文件夹中读取我的数据库。我写了一些可以读取数据库的代码,我的代码工作得很好。然后我从资产文件夹中删除了我的mydb.sqllite并插入了新的.sqllite文件(同名),现在我遇到了异常 public class CredoDatabaseHelper extends SQLiteOpenHelper { public int GetCursor; private Context myContext; publi

我在Sqlite工作。我在资产文件夹中有mydb.sqllite文件,我试图从资产文件夹中读取我的数据库。我写了一些可以读取数据库的代码,我的代码工作得很好。然后我从资产文件夹中删除了我的mydb.sqllite并插入了新的.sqllite文件(同名),现在我遇到了异常

public class CredoDatabaseHelper extends SQLiteOpenHelper {
public int GetCursor;
private Context myContext;
public String DB_PATH = "data/data/my package/databases/";

public static String DB_NAME = "mydb.sqlite";
private SQLiteDatabase db;

private static String usm_Users = "usm_Users";

public CredoDatabaseHelper(Context context) {
    super(context, DB_NAME, null, 1);
    if (db != null && db.isOpen())
        close();

    this.myContext = context;
    // DB_NAME = db_name;

    try {

        createDataBase();
        openDataBase();
    } catch (IOException e) {
        // System.out.println("Exception in creation of database : "+
        // e.getMessage());
        e.printStackTrace();
    }
}

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

    if (dbExist) {
        // System.out.println("Database Exist");
    } else {
        this.getReadableDatabase();

        try {
            copyDatabase();
        } catch (IOException e) {
            throw new Error("Error copying database");
        }
    }
}

private void copyDatabase() throws IOException {
    InputStream input = myContext.getAssets().open(DB_NAME);
    String outputFileName = DB_PATH + DB_NAME;
    OutputStream output = new FileOutputStream(outputFileName);

    byte[] buffer = new byte[1024];
    int length;
    while ((length = input.read(buffer)) > 0) {
        output.write(buffer, 0, length);
    }

    // Close the streams
    output.flush();
    output.close();
    input.close();
    // System.out.println(DB_NAME + "Database Copied !");
}

@Override
public void onCreate(SQLiteDatabase db) {

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}

public void openDataBase() throws SQLException {
    // Open the database
    String myPath = DB_PATH + DB_NAME;
    db = SQLiteDatabase.openDatabase(myPath, null,
            SQLiteDatabase.OPEN_READWRITE);
}

public boolean isOpen() {
    if (db != null)
        return db.isOpen();
    return false;
}

@Override
public synchronized void close() {
    if (db != null)
        db.close();
    super.close();
}

private boolean checkDataBase() {
    SQLiteDatabase checkDB = null;
    try {
        String myPath = DB_PATH + DB_NAME;
        // System.out.println("My Pathe is:- " + myPath);
        // System.out.println("Open");
        checkDB = SQLiteDatabase.openDatabase(myPath, null,
                SQLiteDatabase.OPEN_READWRITE);
        // System.out.println("checkDB value:" + checkDB);
        // System.out.println("My Pathe is:- " + myPath);
    } catch (Exception e) {
        // database does't exist yet.
    }

    if (checkDB != null) {
        // System.out.println("Closed");
        checkDB.close();
        // System.out.println("My db is:- " + checkDB.isOpen());
    }

    return checkDB != null ? true : false;
}

public Cursor execCursorQuery(String sql) {
    Cursor cursor = null;
    try {
        cursor = db.rawQuery(sql, null);
        GetCursor = cursor.getCount();
        Log.i("Inside execCursorQuery try", sql);
    } catch (Exception e) {
        Log.i("Inside execCursorQuery exception", e.getMessage());
    }
    return cursor;
}

public void execNonQuery(String sql) {
    try {
        db.execSQL(sql);
        // Log.d("SQL", sql);
    } catch (Exception e) {
        // Log.e("Err", e.getMessage());
    } finally {
        // closeDb();
    }
}
}


我做错了什么?如果有人知道解决方案,请帮助我。

感谢您对堆栈跟踪保密。如果您将旧数据库放回,而不是新数据库,会发生什么情况?@CL。我不理解您看到@DerGolem Golem两个数据库都有相同的名称。当我把旧数据库也有错误