Android SQLiteOpenHelper无法打开数据库文件 [英] Android SQLiteOpenHelper cannot open database file

查看:574
本文介绍了Android SQLiteOpenHelper无法打开数据库文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我知道这个话题以前被讨论过了。
但是我无法找到我的问题的解决方案,所以我再问一次。
我有创建数据库的问题。
Ive复制执行SQLiteOpenHelper:

I know that subject was disscussed before. But i cant find solution to my problem so im going to ask it one more time. I have problem creating database. Ive copied implementation of SQLiteOpenHelper:

public class DBCreator extends SQLiteOpenHelper 
{
    private static final String DATABASE_NAME = "servision.db";
    private static final int DATABASE_VERSION = 1;


    private static final String INFO_TABLE ="create table INFO(key text,value text);";
    public static final String GATEWAYS_TABLE = "GATEWAYS";

    // Table name
    public static final String TABLE = "events";

    // Columns
    public static final String TIME = "time";
    public static final String TITLE = "title";

    public DBCreator(Context context) 
    {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) 
    {
        try
        {
            String gatewaytablescript ="create table" +GATEWAYS_TABLE+"(" +
            "id int primary key, " +
            "host text not null," +
            "port int not null," +
            "username text," +
            "password text,"+
            "useproxy int," +
            "proxyHost text," +
            "proxyPort port," +
            "desc text," +
            "secondaryip text," +
            "secondaryport int," +
            "timezone int," +
            "encryption int," +
            "customkey text" +
            ");";

            Log.d("DBCreator", "Creating " + GATEWAYS_TABLE + "table");
            db.execSQL(gatewaytablescript);

            String infotablescript ="create table " + INFO_TABLE + "(key text,value text);";
            Log.d("DBCreator", "Creating " + INFO_TABLE + "table");
            db.execSQL(infotablescript);

        }
        catch(SQLException ex)
        {
            Log.d("DBCreator", "onCreate exception " +ex.getMessage()); 
        }
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
    {
        Log.d("EventsData", "onUpgrade");
        if (oldVersion >= newVersion)
            return;


    }
}

我创建它来自主要活动onCreate方法,如下所示。

and i create it from main activity onCreate method like this.

DBCreator db =new DBCreator(this);
db.getReadableDatabase();

在logcat中我收到以下信息:

in logcat i receive following info:

06-01 17:31:15.523: INFO/global(2470): Default buffer size used in BufferedInputStream constructor. It would be better to be explicit if an 8k buffer is required.
06-01 17:31:15.652: INFO/Database(4160): sqlite returned: error code = 14, msg = cannot open file at source line 25467
06-01 17:31:15.652: ERROR/Database(4160): sqlite3_open_v2("/data/data/com.servision.svclient/databases/servision.db", &handle, 6, NULL) failed
06-01 17:31:15.722: ERROR/SQLiteOpenHelper(4160): Couldn't open servision.db for writing (will try read-only):
06-01 17:31:15.722: ERROR/SQLiteOpenHelper(4160): android.database.sqlite.SQLiteException: unable to open database file
06-01 17:31:15.722: ERROR/SQLiteOpenHelper(4160):     at android.database.sqlite.SQLiteDatabase.dbopen(Native Method)
06-01 17:31:15.722: ERROR/SQLiteOpenHelper(4160):     at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1921)
06-01 17:31:15.722: ERROR/SQLiteOpenHelper(4160):     at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:883)
06-01 17:31:15.722: ERROR/SQLiteOpenHelper(4160):     at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:960)
06-01 17:31:15.722: ERROR/SQLiteOpenHelper(4160):     at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:953)
06-01 17:31:15.722: ERROR/SQLiteOpenHelper(4160):     at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:602)
06-01 17:31:15.722: ERROR/SQLiteOpenHelper(4160):     at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203)
06-01 17:31:15.722: ERROR/SQLiteOpenHelper(4160):     at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:98)
06-01 17:31:15.722: ERROR/SQLiteOpenHelper(4160):     at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:158)
06-01 17:31:15.722: ERROR/SQLiteOpenHelper(4160):     at com.servision.svclient.Main.onCreate(Main.java:52)
06-01 17:31:15.722: ERROR/SQLiteOpenHelper(4160):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
06-01 17:31:15.722: ERROR/SQLiteOpenHelper(4160):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
06-01 17:31:15.722: ERROR/SQLiteOpenHelper(4160):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
06-01 17:31:15.722: ERROR/SQLiteOpenHelper(4160):     at android.app.ActivityThread.access$2300(ActivityThread.java:125)
06-01 17:31:15.722: ERROR/SQLiteOpenHelper(4160):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
06-01 17:31:15.722: ERROR/SQLiteOpenHelper(4160):     at android.os.Handler.dispatchMessage(Handler.java:99)
06-01 17:31:15.722: ERROR/SQLiteOpenHelper(4160):     at android.os.Looper.loop(Looper.java:123)
06-01 17:31:15.722: ERROR/SQLiteOpenHelper(4160):     at android.app.ActivityThread.main(ActivityThread.java:4627)
06-01 17:31:15.722: ERROR/SQLiteOpenHelper(4160):     at java.lang.reflect.Method.invokeNative(Native Method)
06-01 17:31:15.722: ERROR/SQLiteOpenHelper(4160):     at java.lang.reflect.Method.invoke(Method.java:521)
06-01 17:31:15.722: ERROR/SQLiteOpenHelper(4160):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
06-01 17:31:15.722: ERROR/SQLiteOpenHelper(4160):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
06-01 17:31:15.722: ERROR/SQLiteOpenHelper(4160):     at dalvik.system.NativeStart.main(Native Method)
06-01 17:31:15.738: INFO/Database(4160): sqlite returned: error code = 14, msg = cannot open file at source line 25467
06-01 17:31:15.738: ERROR/Database(4160): sqlite3_open_v2("/data/data/com.servision.svclient/databases/servision.db", &handle, 1, NULL) failed


在Eclipse中以Galaxy S的调试模式运行程序。
我缺少一些权限?
可能是上下文不好还是什么?

onCreate of DBCreator is never called. Im running program on Galaxy S in debug mode from Eclipse. Am I missing some permissions? May be context is not good or something?

推荐答案

关于 sqlite返回:错误代码= 14,msg =无法在源代码行25467打开文件 sqlite3_open_v2(/ data / data / com.servision.svclient / databases / servision.db & handle,1,NULL)失败错误,这似乎是由于没有数据库和Android尝试创建一个。

In relation to the sqlite returned: error code = 14, msg = cannot open file at source line 25467 and sqlite3_open_v2("/data/data/com.servision.svclient/databases/servision.db", &handle, 1, NULL) failed error, this seems to be caused when there's no database and Android tries to create one.

一些在这里阅读

http://androidblogger.blogspot.com/2011/02/instable-android-and-unable-to-open.html

/ check-if-database-exists-android-sqlite3openv2-failed

http:// c ode.google.com/p/android/issues/detail?id=949

这篇关于Android SQLiteOpenHelper无法打开数据库文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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