packagecom.xxx.sqldecrypt;importandroid.database.Cursor;importandroid.os.Environment;importandroid.support.v7.app.AppCompatActivity;importandroid.os.Bundle;importandroid.util.Log;importnet.sqlcipher.database.SQLiteDatabase;importjava.io.File;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;public class MainActivity extendsAppCompatActivity {private String TAG = "MainActivity";private String baoName = "com.xxx.sqldecrypt";
File dbFile= new File("/data"
+Environment.getDataDirectory().getAbsolutePath()+ "/" + baoName + "/databases/");
String dbPath= "/data"
+Environment.getDataDirectory().getAbsolutePath()+ "/" + baoName + "/databases/my_database.db";//要把你Raw文件的db保存到sdcard中
String passphrase= "123456";privateSQLiteDatabase db;
@Overrideprotected voidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initPublicDB();//初始化数据库
SQLiteDatabase.loadLibs(this);
MyDatabaseHelper dbHelper= new MyDatabaseHelper(this, "my_database.db", null, 1);
db=dbHelper.getWritableDatabase(passphrase);
Cursor cursor= db.query("book_2018", null, null, null, null, null, null);if (cursor != null) {while(cursor.moveToNext()) {
String name= cursor.getString(cursor.getColumnIndex("name"));
Log.d("TAG", "book_2018 name is " +name);
}
}
}/*** 初始化数据库*/
private voidinitPublicDB() {if (!dbFile.exists()) { //如果文件夹不存在,则创建新的文件夹
dbFile.mkdirs();
}if (!(new File(dbPath).exists())) { //判断数据库文件是否存在,若不存在则执行导入,否则直接打开数据库
Log.v(TAG, "导入数据库到/" + baoName + "/databases/");
InputStream is= getResources().openRawResource(R.raw.my_database); //要导入的数据库
FileOutputStream fos = null;try{
fos= newFileOutputStream(dbPath);byte[] buffer = new byte[1024];int count = 0;while ((count = is.read(buffer)) > 0) {
fos.write(buffer,0, count);
}
fos.flush();
fos.close();
is.close();
}catch(FileNotFoundException e) {
e.printStackTrace();
}catch(IOException e) {
e.printStackTrace();
}
}
Log.v(TAG,"initPublicDB = " + (newFile(dbPath).exists()));
}
}