我的Databasehelper.class
public class DatabaseHelper extends SQLiteOpenHelper {
public static final String DBNAME = "db3000.sqlite";
public static final String DBLOCATION = "/data/data/com.gnirt69.sqlitefromassetexample/databases/";
private Context mContext;
private SQLiteDatabase mDatabase;
public DatabaseHelper(Context context) {
super(context, DBNAME, null, 1);
this.mContext = context;
}
@Override
public void onCreate(SQLiteDatabase db) {
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
public void openDatabase() {
String dbPath = mContext.getDatabasePath(DBNAME).getPath();
if(mDatabase != null && mDatabase.isOpen()) {
return;
}
mDatabase = SQLiteDatabase.openDatabase(dbPath, null, SQLiteDatabase.OPEN_READWRITE);
}
public void closeDatabase() {
if(mDatabase!=null) {
mDatabase.close();
}
}
public ArrayList<word> getListWord() {
word product = null;
ArrayList<word> productList = new ArrayList<>();
openDatabase();
Cursor cursor = mDatabase.rawQuery("SELECT * FROM word", null);
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
product = new word(cursor.getInt(0), cursor.getString(1), cursor.getString(2), cursor.getString(3),cursor.getString(4),cursor.getInt(5));
productList.add(product);
cursor.moveToNext();
}
cursor.close();
closeDatabase();
return productList;
}
}
我的Fragment类
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mDBHelper = new DatabaseHelper(getActivity());
//Check exists database
File database = getActivity().getDatabasePath(DatabaseHelper.DBNAME);
if(false == database.exists()) {
mDBHelper.getReadableDatabase();
//Copy db
if(copyDatabase(getActivity())) {
Toast.makeText(getActivity(), "Copy database succes", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getActivity(), "Copy data error", Toast.LENGTH_SHORT).show();
return;
}
}
// Get product list in db when db exists
mProductList = mDBHelper.getListWord();
// getCategoryFromDataBase();
}
private boolean copyDatabase(Context context) {
try {
InputStream inputStream = context.getAssets().open(DatabaseHelper.DBNAME);
String outFileName = DatabaseHelper.DBLOCATION + DatabaseHelper.DBNAME;
OutputStream outputStream = new FileOutputStream(outFileName);
byte[]buff = new byte[1024];
int length = 0;
while ((length = inputStream.read(buff)) > 0) {
outputStream.write(buff, 0, length);
}
outputStream.flush();
outputStream.close();
Log.w("MainActivity","DB copied");
return true;
}catch (Exception e) {
e.printStackTrace();
return false;
}
}
最初,我尝试在Activity.class中调用read data; 它运行得很完美,但是当我在Fragment中尝试时,它无法运行并显示。
java.io.FileNotFoundException: /data/data/com.gnirt69.sqlitefromassetexample/databases/db3000.sqlite: open failed: EACCES (Permission denied)
这里发生了什么?
请帮助我。