在失败的Andr​​oid在我的三星Ÿ二重奏设备创建的SQLite数据库? [英] Failed to create SQLite DB in my Samsung y duos device in Android?

查看:163
本文介绍了在失败的Andr​​oid在我的三星Ÿ二重奏设备创建的SQLite数据库?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有android应用。它的工作大部分设备,但它并没有在三星工作Ÿ二重奏而已。

I have android application . its working most of the devices , but it didn't work in the Samsung y duos only.

我的应用程序的数据库包含6张桌子,2表数据进行加密。如果没有这种加密,它做工精细,放在加密后的数据只有我得到这个问题后。

my application database contain 6 tables, 2 tables data is encrypted. Without this encryption , it was working fine, after put encrypted data only i am getting this issue.

它的错误是:

    01-20 07:03:27.791: I/SqliteDatabaseCpp(13747): sqlite returned: error code = 11, msg = database corruption at line 48188 of [ed759d5a9e], db=/data/data/com_group_mylibs/databases/mylibs_db
01-20 07:03:27.791: I/SqliteDatabaseCpp(13747): sqlite returned: error code = 11, msg = database disk image is malformed, db=/data/data/com_group_mylibs/databases/mylibs_db
01-20 07:03:27.791: I/SqliteDatabaseCpp(13747): sqlite returned: error code = 11, msg = database corruption at line 48188 of [ed759d5a9e], db=/data/data/com_group_mylibs/databases/mylibs_db
01-20 07:03:27.791: I/SqliteDatabaseCpp(13747): sqlite returned: error code = 11, msg = database disk image is malformed, db=/data/data/com_group_mylibs/databases/mylibs_db
01-20 07:03:27.791: E/SqliteDatabaseCpp(13747): sqlite3_exec - Failed to set synchronous mode = 1(Normal) 
01-20 07:03:27.791: I/SqliteDatabaseCpp(13747): sqlite returned: error code = 11, msg = database corruption at line 48188 of [ed759d5a9e], db=/data/data/com_group_mylibs/databases/mylibs_db
01-20 07:03:27.791: I/SqliteDatabaseCpp(13747): sqlite returned: error code = 11, msg = database disk image is malformed, db=/data/data/com_group_mylibs/databases/mylibs_db
01-20 07:03:27.791: E/SqliteDatabaseCpp(13747): CREATE TABLE android_metadata failed
01-20 07:03:27.791: E/DefaultDatabaseErrorHandler(13747): Corruption reported by sqlite on database: /data/data/com.group.mylibs/databases/mylibs.db
01-20 07:03:27.801: E/DefaultDatabaseErrorHandler(13747): deleting the database file: /data/data/com.group.mylibs/databases/mylibs.db
01-20 07:03:28.001: I/SqliteDatabaseCpp(13747): sqlite returned: error code = 1, msg = no such table: hint, db=/data/data/com_group.mylibs/databases/mylibs_db
01-20 07:03:28.001: W/dalvikvm(13747): threadid=1: thread exiting with uncaught exception (group=0x40c31a68)
01-20 07:03:28.011: E/AndroidRuntime(13747): FATAL EXCEPTION: main
01-20 07:03:28.011: E/AndroidRuntime(13747): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.group.mylibs/com.group.mylibs.LibraryActivity}: android.database.sqlite.SQLiteException: no such table: hint: , while compiling: SELECT id, wordTypeId, hintText FROM hint WHERE wordTypeId= 0

这是我的code:

public class MyLibsDatabaseHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "mylibs.db";
private static final int DATABASE_VERSION = 5;
private static String DB_PATH = "/data/data/com.group.mylibs/databases/";
private static String DB_NAME = "mylibs.db";
private final Context myContext;
private SQLiteDatabase mylibsDataBase;

public SQLiteDatabase getMylibsDataBase() {
    return mylibsDataBase;
}

public void setMylibsDataBase(SQLiteDatabase mylibsDataBase) {
    this.mylibsDataBase = mylibsDataBase;
}



public MyLibsDatabaseHelper(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
    myContext = context;
    DB_PATH = "/data/data/" + context.getPackageName() + "/databases/";
    try {
        createDataBase();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

@Override
public void onCreate(SQLiteDatabase database) {
}



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

public void createDataBase() throws IOException {

    boolean dbExist = checkDataBase();
    if (dbExist) {
    } else {
        this.getReadableDatabase();
        try {
            copyDataBase();
        } catch (IOException e) {

            throw new Error("Error copying database");
        }
    }
}

/**
 * Check if the database already exist to avoid re-copying the file each
 * time open the application.
 * 
 * @return true if it exists, false if it doesn't
 */
private boolean checkDataBase() {

    SQLiteDatabase checkDB = null;
    try
    {
    File dbFile = new File(DB_PATH + DB_NAME); 
    return dbFile.exists();
} catch (Exception ex) {
    Log.e("Error checkDataBase", ex.toString());
    return false;
}
}

private void copyDataBase() throws IOException {
    try {
        InputStream myInput = myContext.getAssets().open(DB_NAME);
        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();
    } catch (Exception ex) {
        Log.e("Error copyDataBase", ex.toString());
    }
}

public void openDataBase() throws SQLException {
    // Open the database
    String myPath = DB_PATH + DB_NAME;

    this.mylibsDataBase = SQLiteDatabase.openDatabase(myPath, null,
            SQLiteDatabase.OPEN_READWRITE);
}

此应用程序与大多数仿真器和放大器的工作正常;设备,只有在问题三星Ÿ二重奏

This application is working fine with most of the emulator & device , problem only in Samsung y duos .

我检查3.7&放源码版本;我创建的数据库版本为3.6.18。

I checked sqlite version 3.7 & i created database version is 3.6.18.

请告诉我什么是一个问题。

please tell me what is an issue.

先谢谢了。

推荐答案

展望Android源$ C ​​$ C似乎类<一href=\"https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/database/DefaultDatabaseErrorHandler.java\"相对=nofollow> DefaultDatabaseErrorHandler.java
表明你的数据库已损坏。展望 DefaultDatabaseErrorHandler.java 和你的日志表明, onCorruption() DefaultDatabaseErrorHandler.java 类是被称为和方法还删除数据库。所以,你已经添加了加密2表可能导致的问题。我建议你​​,请检查这些2表,如果他们正在创造任何损坏你的整个数据库。

Looking into the Android Source code it seems that class DefaultDatabaseErrorHandler.java indicates that your database is corrupted. Looking into DefaultDatabaseErrorHandler.java and your logs suggests that onCorruption() of DefaultDatabaseErrorHandler.java class is being called and that method further deletes your database. So, the 2 tables that you have added for encryption may be causing the problem. I suggest you to please check those 2 table if they are creating any corruption to your whole database.

这篇关于在失败的Andr​​oid在我的三星Ÿ二重奏设备创建的SQLite数据库?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆