08-18 05:18:17.501: E/Database(4661): sqlite3_open_v2("data/data/edu/huang/database/myDatabase", &handle, 6, NULL) failed
本人写了个小小的Android数据库的测试程序,使用的是Android中自带的数据库SQLite,但是不知道为什么,当创建数据库的时候老是在LogCat中挑出上面一句错误提示,大家有没有遇到过这样的错误提示,请求指点。

解决方案 »

  1.   

    刚做SQL数据库相关东西。。
    发代码看看~~
      

  2.   

    你用的模拟器是那个版本,像2.1模拟器 复杂的sql语句是识别不出来的!你再发的详细点,模拟器是那个版本?连接数据库的句子。。?发上来
      

  3.   

    代码上来
      public void createOrOpenDatabase(){
         try {
    slDatabase = SQLiteDatabase.openDatabase("data/data/edu/huang/database/myDatabase", null, SQLiteDatabase.OPEN_READWRITE|SQLiteDatabase.CREATE_IF_NECESSARY);
    appendMessage("数据库已经成功打开!");
    String sql = "create table if not exists student (sno char(5),sname varchar(20), sage int, sclass char(5))";
    slDatabase.execSQL(sql);
    appendMessage("表student已经成功创建!");
    } catch (Exception e) {
    Toast.makeText(DatabaseActivity.this, "数据库创建失败!", Toast.LENGTH_LONG).show();
    }
        }
        
        public void closeDatabase(){
         try {
    slDatabase.close();
    appendMessage("数据库成功关闭!");
    } catch (Exception e) {
    Toast.makeText(this, "数据库关闭失败:"+e.toString(), Toast.LENGTH_LONG).show();
    }
        }
      

  4.   

    先判断数据库文件是否存在if(databaseExist())
    {
    createOrOpenDatabase()
    .....
    }public boolean databaseExist() 

        File dbFile = new File("data/data/edu/huang/database/myDatabase"); 
        return dbFile.exists(); 
    }
      

  5.   

    data/data/edu/huang/database/myDatabase
    路径貌似应该是
    databases.复数
      

  6.   


    应该是(!databaseExist())吧,我试了,但是还是不行。我是将建立数据库的让一个Button进行监听,但是每次我运行完程序查看File Explorer还没有点击Button的点击事件时都能够找到一个具有一定大小的数据文件,我将它导出后用Navicat 查看里面也没有什么内容。另外我使用输出进行查看点击建立数据库的按钮根本就没有运行建立数据库的代码,甚是郁闷啊
      

  7.   

    什么意思?edu.huang.database这个是我建立的工程的包名,myDatabase是要建立的数据库的名字
      

  8.   

    Android智能手机存储数据的方式:存入SD卡和其自带的内存卡上,对吧。从理论上将,我们应该可以将数据保存在这两者中的任何一种中吧。我先换一换路径试试
      

  9.   

    你的路径,默认的是放在data/data/edu/huang/database/databases中吧
      

  10.   

    正确路径:data/data/edu.huang.database/databases/myDatabase.db
    android利用SQLiteDatabase建立的数据库,数据库文件具体保存路径是:“data/data/应用程序完整包名/databases/数据库名”,手机获得root权限后,可以利用re文件管理器看到这个路径的。另求助:http://topic.csdn.net/u/20120820/10/834f6596-412b-4d68-a15f-4f5586a03c8d.html?43639
      

  11.   

    /data/data/edu/huang/database/myDatabase这样试试吧
      

  12.   

    lz也可以这样slDatabase = SQLiteDatabase.openOrCreateDatabase("data/data/edu.huang.database/databases/myDatabase.db
    ",null);
      

  13.   

    按照你说的方法修改了,但是又出现新的问题了:
    08-20 09:49:28.737: I/ActivityThread(475): Publishing provider edu.huang.database.provider.student: edu.huang.database.MyContentProvider
    08-20 09:49:28.817: E/Database(475): sqlite3_open_v2("/data/data/edu.huang.database/databases/myDatabase.db", &handle, 6, NULL) failed
    08-20 09:49:28.817: D/AndroidRuntime(475): Shutting down VM
    08-20 09:49:28.839: W/dalvikvm(475): threadid=3: thread exiting with uncaught exception (group=0x4001aa28)
    08-20 09:49:28.848: E/AndroidRuntime(475): Uncaught handler: thread main exiting due to uncaught exception
    08-20 09:49:28.868: E/AndroidRuntime(475): java.lang.RuntimeException: Unable to get provider edu.huang.database.MyContentProvider: android.database.sqlite.SQLiteException: unable to open database file
    08-20 09:49:28.868: E/AndroidRuntime(475):  at android.app.ActivityThread.installProvider(ActivityThread.java:4112)
    08-20 09:49:28.868: E/AndroidRuntime(475):  at android.app.ActivityThread.installContentProviders(ActivityThread.java:3908)
    08-20 09:49:28.868: E/AndroidRuntime(475):  at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3867)
    08-20 09:49:28.868: E/AndroidRuntime(475):  at android.app.ActivityThread.access$2800(ActivityThread.java:116)
    08-20 09:49:28.868: E/AndroidRuntime(475):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1831)
    08-20 09:49:28.868: E/AndroidRuntime(475):  at android.os.Handler.dispatchMessage(Handler.java:99)
    08-20 09:49:28.868: E/AndroidRuntime(475):  at android.os.Looper.loop(Looper.java:123)
    08-20 09:49:28.868: E/AndroidRuntime(475):  at android.app.ActivityThread.main(ActivityThread.java:4203)
    08-20 09:49:28.868: E/AndroidRuntime(475):  at java.lang.reflect.Method.invokeNative(Native Method)
    08-20 09:49:28.868: E/AndroidRuntime(475):  at java.lang.reflect.Method.invoke(Method.java:521)
    08-20 09:49:28.868: E/AndroidRuntime(475):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
    08-20 09:49:28.868: E/AndroidRuntime(475):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
    08-20 09:49:28.868: E/AndroidRuntime(475):  at dalvik.system.NativeStart.main(Native Method)
    08-20 09:49:28.868: E/AndroidRuntime(475): Caused by: android.database.sqlite.SQLiteException: unable to open database file
    08-20 09:49:28.868: E/AndroidRuntime(475):  at android.database.sqlite.SQLiteDatabase.dbopen(Native Method)
    08-20 09:49:28.868: E/AndroidRuntime(475):  at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1584)
    08-20 09:49:28.868: E/AndroidRuntime(475):  at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:638)
    08-20 09:49:28.868: E/AndroidRuntime(475):  at edu.huang.database.MyContentProvider.onCreate(MyContentProvider.java:67)
    08-20 09:49:28.868: E/AndroidRuntime(475):  at android.content.ContentProvider.attachInfo(ContentProvider.java:697)
    08-20 09:49:28.868: E/AndroidRuntime(475):  at android.app.ActivityThread.installProvider(ActivityThread.java:4109)
    08-20 09:49:28.868: E/AndroidRuntime(475):  ... 12 more
    08-20 09:49:28.878: I/dalvikvm(475): threadid=7: reacting to signal 3
    出错的代码是MyContentProvider类中的代码:
    public boolean onCreate() {
    //数据库所在路径
    //CursorFactory
    //读写、若不存在则创建
    sld=SQLiteDatabase.openDatabase("/data/data/edu.huang.database/databases/myDatabase.db", null,SQLiteDatabase.OPEN_READWRITE|SQLiteDatabase.CREATE_IF_NECESSARY);

    return false;
    }
      

  14.   

    lz写了ContentProvider?还是在打开数据库的时候就出错了……?如果是ContentProvider出错了,你得先检查包名是否正确,就是你这里的包名是否与AndroidManifest.xml中的包名对应(数据库的包名是整个应用的包名,也就是AndroidManifest.xml中定义的主包名,而不是当前类所处的包名,如果只有一个包,自然就不是这个问题),如果还不明白可以加Q973303767,我这边有demo,,现在下班了哈,回去再说……嘿
      

  15.   

    啊,这样,理解你的意思了,原来SQLite创建的数据库还有默认的路径,但是应该可以对这个路径修改吧,我们完全可以不使用默认的路径吧,但是即使是使用了默认的路径到现在我还是没有解决问题
      

  16.   

    对,我写了ContentProvider,但是所有的类都放在了一个包中,所以像你说的包的问题应该就不存在了吧,本来我的数据库存放路径是data/data/edu.huang.database/myDatabase.db(此时的问题是我第一次贴出来的),但是看上面楼层的意思是SQLite创建的数据库有自己默认的路径,所以,我将路径改为:data/data/edu.huang.database/databases/myDatabase.db,改过之后就又出现了问题,就是22楼中贴出的问题
      

  17.   


    你不会真的用(!databaseExist())吧? 文件不存在,你还有什么好调用的?
      

  18.   

    亲,我看着你路径就比较纠结,教你这样得到路径 :
     String dbPath=android.os.Environment.getExternalStorageDirectory().getPath();
      String dbFile=dbPath+"/ourbook.db3";
    先把路径整好,这样得到的dbpath 就是DDMS 中File Explorer --data中路径,去data里面找你数据库