求救!我想在android真机子上导入外部数据库(我放在assest下面的raw文件下)。代码如下:
public class DBManager {
private final int BUFFER_SIZE = 400000;
public static final String DB_NAME = "Test.db";
public static final String PACKAGE_NAME = "com.example.testdatabase";
public static final String DB_PATH = "/data"+ Environment.getDataDirectory().getAbsolutePath()
+ "/" + PACKAGE_NAME;
private SQLiteDatabase database;
private Context context;
DBManager(Context context) {
this.context = context;
}
public void openDatabase() {
this.database = this.openDatabase(DB_PATH + "/" + DB_NAME);
}
private SQLiteDatabase openDatabase(String dbfile) {
try {
if(!(new File(dbfile).exists())){
InputStream is = this.context.getResources().openRawResource(R.raw.test);
FileOutputStream fos = new FileOutputStream(dbfile);
byte[] buffer = new byte[BUFFER_SIZE];
int count = 0;
while ((count = is.read(buffer)) > 0) {
fos.write(buffer, 0, count);
}
fos.close();
is.close();
}
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbfile, null);
return db;
} catch(FileNotFoundException e) {
Log.e("Database", "File not found");
e.printStackTrace();
} catch (IOException e) {
Log.e("Database", "IO exception");
e.printStackTrace();
}
return null;
//http://jalhaskazakhlike.lofter.com/post/3f320a_15df9b3
//http://www.cnblogs.com/xiaowenji/archive/2011/01/03/1925014.html
}
public void closeDatabase() {
this.database.close();
}
}
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
public class MainActivity extends Activity {
public DBManager dbHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dbHelper = new DBManager(this);
dbHelper.openDatabase();
dbHelper.closeDatabase();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
然后我在DDMS模式情况下,查看data文件,我发现没有找到我创建的数据库。表示创建失败了。网上说可能root问题。麻烦大家手把手指点一下,怎么解决?
public class DBManager {
private final int BUFFER_SIZE = 400000;
public static final String DB_NAME = "Test.db";
public static final String PACKAGE_NAME = "com.example.testdatabase";
public static final String DB_PATH = "/data"+ Environment.getDataDirectory().getAbsolutePath()
+ "/" + PACKAGE_NAME;
private SQLiteDatabase database;
private Context context;
DBManager(Context context) {
this.context = context;
}
public void openDatabase() {
this.database = this.openDatabase(DB_PATH + "/" + DB_NAME);
}
private SQLiteDatabase openDatabase(String dbfile) {
try {
if(!(new File(dbfile).exists())){
InputStream is = this.context.getResources().openRawResource(R.raw.test);
FileOutputStream fos = new FileOutputStream(dbfile);
byte[] buffer = new byte[BUFFER_SIZE];
int count = 0;
while ((count = is.read(buffer)) > 0) {
fos.write(buffer, 0, count);
}
fos.close();
is.close();
}
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbfile, null);
return db;
} catch(FileNotFoundException e) {
Log.e("Database", "File not found");
e.printStackTrace();
} catch (IOException e) {
Log.e("Database", "IO exception");
e.printStackTrace();
}
return null;
//http://jalhaskazakhlike.lofter.com/post/3f320a_15df9b3
//http://www.cnblogs.com/xiaowenji/archive/2011/01/03/1925014.html
}
public void closeDatabase() {
this.database.close();
}
}
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
public class MainActivity extends Activity {
public DBManager dbHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dbHelper = new DBManager(this);
dbHelper.openDatabase();
dbHelper.closeDatabase();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
然后我在DDMS模式情况下,查看data文件,我发现没有找到我创建的数据库。表示创建失败了。网上说可能root问题。麻烦大家手把手指点一下,怎么解决?