Android Studio中怎么使用已经有的SQLite数据库?

我有一些word文档做成了sqlite数据库,想在APP中直接读取使用,并不需要重新建表或者修改它,应该在代码里怎么写呢?网上的教程全部都是在程序开始时创建一个空的数据库,然后再进行相关操作,怎么办?
2016-07-03 10:27 添加评论 分享
已邀请:

最佳回复

1

张_虾昂 - 来我的blog逛逛吧zhangxiaang.github.io

赞同来自: ask

可以尝试把db文件放到assets文件夹下,直接当做资源来读取。参考一下代码:

public class DataBaseHelper extends SQLiteOpenHelper {
private Context mycontext;

//private String DB_PATH = mycontext.getApplicationContext().getPackageName()+"/databases/";
private static String DB_NAME = "(datbasename).sqlite";//拓展名可以是.sqlite 或者是 .db
public SQLiteDatabase myDataBase;
/*private String DB_PATH = "/data/data/"
                    + mycontext.getApplicationContext().getPackageName()
                    + "/databases/";*/

public DataBaseHelper(Context context) throws IOException {
    super(context,DB_NAME,null,1);
    this.mycontext=context;
    boolean dbexist = checkdatabase();//首先判断下db是不是存在 存在的话就直接使用了
    if (dbexist) {
        //System.out.println("Database exists");
        opendatabase(); //直接打开
    } else {
        System.out.println("Database doesn't exist");
        createdatabase();//否则的话才去创建新的db
    }
}

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() {
    //SQLiteDatabase checkdb = null;
    boolean checkdb = false;
    try {
        String myPath = DB_PATH + DB_NAME;
        File dbfile = new File(myPath);
        //checkdb = SQLiteDatabase.openDatabase(myPath,null,SQLiteDatabase.OPEN_READWRITE);
        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();
}

}

要回复问题请先登录注册

退出全屏模式 全屏模式 回复