程序开始的时候要创建一个数据库,然后还要建立表,表里面插入几条内容.
我看网上的例子都是写一个类,然后把数据库名字和表名字写在里面,然后每次new的时候都会创建.这样合理吗?能不能把创建数据库和表名的逻辑写另外一个单独的函数里面啊? 然后每次启动的时候就先检查数据库是否存在,表是否存在,不行就创建?
还有能把apk里面自带的数据库拷贝到手机的数据库目录吗?这样我觉得就省事了.但是网上找不到怎么拷贝的方法...

解决方案 »

  1.   

    推荐你还是把db文件写在assets里面,然后写入手机里。
    db写入你的文件的方法
    private void dbImport()
        {
            try
            {
                File dir = new File(DATABASE_PATH);
                // 如果/sdcard/testdb目录中存在,创建这个目录
                if (!dir.exists())
                    dir.mkdir();
                // 如果在/sdcard/testdb目录中不存在
                // test.db文件,则从asset\db目录中复制这个文件到
                // SD卡的目录(/sdcard/testdb)
                if (!(new File(databaseFilename2)).exists())
                {
    //                File f = (new File(databaseFilename2));
    //                f.delete();
                    // 获得封装testDatabase.db文件的InputStream对象
                    AssetManager asset = getAssets();
                    InputStream is = asset.open("db/eneverydaymyword.db");
                    FileOutputStream fos = new FileOutputStream(databaseFilename2);
                    byte[] buffer = new byte[1048576];
                    int count = 0;
                    // 开始复制testDatabase.db文件
                    while ((count = is.read(buffer)) > 0)
                    {
                        fos.write(buffer, 0, count);
                    }
                    fos.close();
                    is.close();
                    // asset.close();
                }
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
            // deleteDatabase("testDatabase.db");//删除数据库
        }
      

  2.   

    我是用navicat for sqlite 编辑db文件的。
      

  3.   

    请问我要是想把assert里面的数据库拷贝到我这个应用的那个目录 就是 data/data/...../databases/ 这个目录好像有权限 没法看见 拷贝的过去吗?
      

  4.   

    可以拷贝到data/data/...../databases/,你在adb shell下面看一下文件有没有过去
      

  5.   

    请问我要是想把assert里面的数据库拷贝到我这个应用的那个目录 就是 data/data/...../databases/ 这个目录好像有权限 没法看见 拷贝的过去吗?
    我记得是可以拷贝到自己的包里去,如果不行也可以写入sd卡。
      

  6.   

    如果是拷贝过去的话 这个数据库的版本号是多少呢 我用代码创建数据库的时候 需要传版本号的 
    我试着拷贝一个数据库文件到程序的databases目录 发现我调用sqlHelper的时候 还是会触发oncreate方法
    如何能给数据库加版本号呢....
      

  7.   

    啊 不好意思 没事了 是我自己写错了 把数据库给删了 所以触发了oncreate方法 多谢了