我正在創建使用現有sqlite數據庫的Dictionary應用程序。我已將數據庫放置在資產文件夾中,並且在第一次啓動應用程序時使用以下代碼來複制數據庫。 (我從this後借來的想法)從資產文件夾複製數據庫
DatabaseHelper.java
public class DatabaseHelper {
private static String DB_PATH = "";
private static String DB_NAME = "abc.sqlite";
private SQLiteDatabase myDatabase;
private Context myContext;
public DatabaseHelper(Context context) {
myContext = context;
if (android.os.Build.VERSION.SDK_INT >= 17)
DB_PATH = context.getApplicationInfo().dataDir + "/databases/";
else
DB_PATH = "/data/data/" + context.getPackageName() + "/databases/";
Log.d("path", DB_PATH);
}
public void copyDatabase() {
InputStream myInput;
OutputStream outStream;
try {
myInput = myContext.getAssets().open(DB_NAME);
String file = DB_PATH + DB_NAME;
outStream = new FileOutputStream(file);
byte[] buffer = new byte[1024];
int length = 0;
while ((length = myInput.read(buffer)) >= 0) {
outStream.write(buffer, 0, length);
}
outStream.flush();
myInput.close();
outStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
然後我打電話上述copyDatabase()
方法形成我MainActivity
。這是代碼。
public class MainActivity extends Activity {
DatabaseHelper myDbHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout);
myDbHelper = new DatabaseHelper(getApplicationContext());
myDbHelper.copyDatabase();
}
}
但問題是,Android不會複製數據庫。我使用了Log工具,並且發現while循環從不運行。 這段代碼有什麼問題。 謝謝。
只需將while循環的行更改爲'while((length = myInput.read(buffer))> 0){'只需將它與'>'比較而不是'> ='。 – GrIsHu
Ya繼續使用GrlsHu並且您還需要在轉到FileOutputStream之前創建文件 –
在SO和其他地方有十幾個這樣的例子。應該用Google搜索。 – 323go