经过自己两天的摸索终于解决apk和数据库一起发布问题.以至于能程序启动就能数据库的数据
数据库建立就不用说了由于不能直接打开res\raw目录中的数据库文件,不过我们可以通过将这个文件复制到手机内存或SD卡上来访问。复制的方法也很简单,就是在程序第一次启动时判断要复制的目标路径是否存在该数据库文件,如果不存在该数据库文件,那先复制这个文件,然后再打开数据库文件。复制数据库文件可以通过getResources().openRawResource方法获得res\raw目录中资源的InputStream对象,然后将该InputStream对象中的数据写入其他的目录中相应文件中。打开数据库可以使用SQLiteDatabase.openOrCreateDatabase方法来打开SQLite数据库文件。openOrCreateDatabase方法可以打开任意目录下的数据库文件。
private SQLiteDatabase openDatabase()
{
final String DATABASE_PATH = android.os.Environment.getExternalStorageDirectory().getAbsolutePath()+ "/download";//2.2只能为这个路径 只有这个路径才能运行操作
final String DATABASE_FILENAME = "sms.db";
try
{
// 获得dictionary.db文件的绝对路径
String databaseFilename = DATABASE_PATH + "/" + DATABASE_FILENAME;
File dir = new File(DATABASE_PATH);
// 如果/sdcard/dictionary目录中存在,创建这个目录
if (!dir.exists())
{
if(!dir.mkdir())
throw new Exception("目录不存在,创建失败!");
}
else
{
Toast.makeText(this, "目录", 30000).show();
}
// 如果在/sdcard/dictionary目录中不存在dictionary.db文件,则从res\raw目录中复制这个文件到
// SD卡的目录(/sdcard/dictionary)
if (!(new File(databaseFilename)).exists())
{
// 获得封装dictionary.db文件的InputStream对象
InputStream is = getResources().openRawResource(R.raw.sms);
FileOutputStream fos = new FileOutputStream(databaseFilename);
byte[] buffer = new byte[8192];
int count = 0;
// 开始复制dictionary.db文件
while ((count = is.read(buffer)) > 0)
{
fos.write(buffer, 0, count);
}
Toast.makeText(this, "B", 10000).show();
fos.close();
is.close();
}
// 打开/sdcard/dictionary目录中的dictionary.db文件
SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(databaseFilename, null);
return database;
}
catch (Exception e)
{
Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show();
}
return null;
} 主要还有就是注册权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission> 操作 用数据库: public Cursor select(String table,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy){
//SQLiteDatabase db=this.getReadableDatabase();
SQLiteDatabase db=SQLiteDatabase.openOrCreateDatabase(databaseFilename, null);//databaseFilename的值:(final String DATABASE_PATH = android.os.Environment.getExternalStorageDirectory().getAbsolutePath()+ "/download";
final String DATABASE_FILENAME = "sms.db";
String databaseFilename = DATABASE_PATH + "/" + DATABASE_FILENAME;)就是开始文件复制的路径
Cursor cursor=db.query(table, columns, selection, selectionArgs, groupBy, having, orderBy);
return cursor;
}//yhqbsand
2011-08-07 03:19