在Android中不能直接打开res /raw目录中的数据库文件,而需要在程序第一次启动时将该文件复制到手机内存或SD卡的某个目录中,
然后再打开该数据库文件。
复制的基本方法是使用getResources().openRawResource方法获得res/raw目录中资源的 InputStream对象,
然后将该InputStream对象中的数据写入其他的目录中相应文件中。
在Android SDK中可以使用SQLiteDatabase.openOrCreateDatabase方法来打开任意目录中的SQLite数据库文件。
实现如下:copyDB();
private void copyDB() { //只要你拷贝了一次,我就不要你再拷贝了 try { File file = new File(getFilesDir(), "address.db"); if(file.exists()&&file.length()>0){ //正常了,就不需要拷贝了 Log.i("copyDB", "正常了,就不需要拷贝了"); }else{ //().openRawResource //InputStream is = getAssets().open("address.db"); InputStream is = getResources().openRawResource(R.raw.address); FileOutputStream fos = new FileOutputStream(file); byte[] buffer = new byte[1024]; int len = 0; while((len = is.read(buffer))!= -1){ fos.write(buffer, 0, len); } is.close(); fos.close(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
打开数据库:
public static String path = "data/data/com.itheima.mobilesafe/files/address.db"; public static String SearchNumber(String number){ String adrress = number; SQLiteDatabase openDatabase = SQLiteDatabase.openDatabase(path, null, SQLiteDatabase.OPEN_READONLY); Cursor cursor = openDatabase.rawQuery("select location from data2 where id=(select outkey from data1 where id=?)", new String[]{number.substring(0,7)}); while(cursor.moveToNext()){ String location = cursor.getString(0); adrress = location ; } return adrress; }
时间: 2024-10-28 22:47:11