阅读从资源文件夹sqlite的文件 [英] Reading sqlite file from asset folder

查看:138
本文介绍了阅读从资源文件夹sqlite的文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发中,我想读源码数据库从项目的资源文件夹文件的应用程序。我已经在网上搜索,但没有发现有用的。请帮助我。 谢谢你。

i am developing an application in which i want to read an sqlite database file from the asset folder of the project. i have searched the web but nothing found helpful. please help me. Thanks.

推荐答案

您无法从资产的文件夹中直接打开文件。相反,你需要的文件夹复制你的资产的SQLite数据库到内部/外部存储和以后使用的文件路径打开文件。试试下面的code读取资产产生的SQLite数据库,并将其复制到SD卡来使用它。

You cannot directly open files from assets folder. Instead, you need to copy the sqlite database of your assets folder into an internal/external storage and later use the File path to open the file. Try out below code to read the sqlite database from assests and copy it into sdcard to use it.

public class DataBaseHelper extends SQLiteOpenHelper {
   private Context mycontext;
   private static String DB_NAME = "(datbasename).sqlite";
   public SQLiteDatabase myDataBase;

public DataBaseHelper(Context context) throws IOException {
    super(context,DB_NAME,null,1);
    this.mycontext=context;
    boolean dbexist = checkdatabase();
    if (dbexist) {
        System.out.println("Database exists");
        opendatabase(); 
    } else {
        System.out.println("Database doesn't exist");
        createdatabase();
    }
}

public void createdatabase() throws IOException {
    boolean dbexist = checkdatabase();
    if(dbexist) {
        System.out.println(" Database exists.");
    } else {
        this.getReadableDatabase();
        try {
            copydatabase();
        } catch(IOException e) {
            throw new Error("Error copying database");
        }
    }
}   

private boolean checkdatabase() {

    boolean checkdb = false;
    try {
        String myPath = DB_PATH + DB_NAME;
        File dbfile = new File(myPath);
        checkdb = dbfile.exists();
    } catch(SQLiteException e) {
        System.out.println("Database doesn't exist");
    }
    return checkdb;
}

private void copydatabase() throws IOException {
    //Open your local db as the input stream
    InputStream myinput = mycontext.getAssets().open(DB_NAME);

    // Path to the just created empty db
    String outfilename = DB_PATH + DB_NAME;

    //Open the empty db as the output stream
    OutputStream myoutput = new FileOutputStream("/data/data/(packagename)/databases   /(datbasename).sqlite");

    // transfer byte to inputfile to outputfile
    byte[] buffer = new byte[1024];
    int length;
    while ((length = myinput.read(buffer))>0) {
        myoutput.write(buffer,0,length);
    }

    //Close the streams
    myoutput.flush();
    myoutput.close();
    myinput.close();
}

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

public synchronized void close() {
    if(myDataBase != null) {
        myDataBase.close();
    }
    super.close();
}
}

这篇关于阅读从资源文件夹sqlite的文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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