我已经创建了一个SQLite数据库。我想在我的Android项目中使用此数据库文件。我想把这个数据库和我的应用程序捆绑在一起
应用程序如何访问该数据库并将其用作其数据库,而不是创建新数据库
注意:
在尝试此代码之前,请在以下代码中找到此行:
私有静态字符串DB_NAME=“YourDbName”//数据库名称
DB_NAME这里是数据库的名称。假设您在assets文件夹中有数据库的副本,例如,如果您的数据库名称为ordersDB,则DB_name的值将为ordersDB
私有静态字符串DB_NAME=“ordersDB”;
将数据库保存在资产文件夹中,然后执行以下操作:
DataHelper类:
导入java.io.File;
导入java.io.FileOutputStream;
导入java.io.IOException;
导入java.io.InputStream;
导入java.io.OutputStream;
导入android.content.Context;
导入android.database.SQLException;
导入android.database.sqlite.SQLiteDatabase;
导入android.database.sqlite.SQLiteOpenHelper;
导入android.util.Log;
公共类DataBaseHelper扩展了SQLiteOpenHelper{
私有静态字符串TAG=“DataBaseHelper”;//仅为LogCat窗口标记
私有静态字符串DB_NAME=“YourDbName”;//数据库名称
私有静态int DB_VERSION=1;//数据库版本
私有最终文件DB_文件;
私有SQLITE数据库mDataBase;
私有最终上下文mContext;
公共数据库助手(上下文){
super(上下文,数据库名称,空,数据库版本);
DB_FILE=context.getDatabasePath(DB_名称);
this.mContext=上下文;
}
public void createDataBase()引发IOException{
//如果数据库不存在,请从资产中复制它。
布尔值mDataBaseExist=checkDataBase();
如果(!mDataBaseExist){
这是.getReadableDatabase();
这个。关闭();
试一试{
//从资产中复制数据库
copyDataBase();
Log.e(标记“createDatabase已创建”);
}捕获(IOException-mIOException){
抛出新错误(“ErrorCopyingDataBase”);
}
}
}
//检查数据库文件夹中是否存在该数据库文件
私有布尔校验数据库(){
返回DB_FILE.exists();
}
//从资产中复制数据库
私有void copyDataBase()引发IOException{
InputStream mInput=mContext.getAssets().open(DB_NAME);
OutputStream mOutput=新文件OutputStream(DB_文件);
字节[]mBuffer=新字节[1024];
整数长度;
而((mlLength=mInput.read(mBuffer))>;0){
mOutput.write(mBuffer,0,最大长度);
}
mOutput.flush();
mOutput.close();
mInput.close();
}
//打开数据库,以便我们可以查询它
公共布尔值openDataBase()引发SQLException{
//Log.v(“DB_PATH”,DB_FILE.getAbsolutePath());
mDataBase=SQLiteDatabase.openDatabase(DB_文件,null,SQLiteDatabase.CREATE_,如果需要);
//mDataBase=SQLiteDatabase.openDatabase(DB\u文件,null,SQLiteDatabase.NO\u本地化\u COLLATORS);
返回mDataBase!=null;
}
@凌驾
公共同步作废关闭(){
if(mDataBase!=null){
mDataBase.close();
}
super.close();
}
}
编写一个DataAdapter类,如:
导入java.io.IOException;
导入android.content.Context;
导入android.database.Cursor;
导入android.database.SQLException;
导入android.database.sqlite.SQLiteDatabase;
导入android.util.Log;
公共类测试适配器{
受保护的静态最终字符串标记=“DataAdapter”;
私有最终上下文mContext;
私有数据库mDb;
私有数据库助手mDbHelper;
公共测试适配器(上下文){
this.mContext=上下文;
mDbHelper=新数据库助手(mContext);
}
public TestAdapter createDatabase()引发SQLException{
试一试{
mDbHelper.createDataBase();
}捕获(IOException-mIOException){
Log.e(标记,mIOException.toString()+“UnableToCreateDatabase”);
抛出新错误(“无法创建数据库”);
}
归还这个;
}
public TestAdapter open()引发SQLException{
试一试{
mDbHelper.openDataBase();
mDbHelper.close();
mDb=mDbHelper.getReadableDatabase();
}catch(SQLException-msqleexception){
Log.e(标记“open>;”+mSQLException.toString());
抛出mSQLException;
}
归还这个;
}
公众假期结束(){
mDbHelper.close();
}
公共游标getTestData(){
试一试{
String sql=“从myTable中选择*”;
游标mCur=mDb.rawQuery(sql,null);
如果(mCur!=null){
mCur.moveToNext();
}
返回mCur;
}catch(SQLException-msqleexception){
Log.e(标记“getTestData>;”+msqleexception.toString());
抛出mSQLException;
}
}
}
现在您可以像这样使用它:
TestAdapter mDbHelper=新的TestAdapter(urContext);
mDbHelper.createDatabase();
mDbHelper.open();
游标testdata=mDbHelper.getTestData();
mDbHelper.close();
编辑:多亏了JDx
DB_PATH=“/data/data/”+context.getPackageName()+”/databases/”;
致:
DB_PATH=context.getApplicationInfo().dataDir+“/databases/”;
在DataHelper类中,此代码将用于Jelly Bean 4.2多用户
编辑:我们可以使用
DB_PATH=context.getDatabasePath(DB_NAME.getAbsolutePath();
这将为我们提供数据库文件的完整路径,并适用于所有Android版本