就像現在這樣,我有一個TableLayout,我根據某個.db文件中的某些列和每一行來填充它。該表根據一個.db文件填充,我將從現在開始調用x。每次重新創建活動時,我的填充方法(填充表格)會檢查x.db中的內容。表中的每一行都有相同的3列,但如果您長按一行,則可以看到該行的每個細節(細節計算其中一列顯示,並且每行的計算不同)。從.db文件保存信息的正確方法是什麼?
從這裏用戶可以選擇計算總計,保存當前的.db文件,加載不同的.db文件或清除.db文件並重新開始。這裏是我正在處理保存和加載,這是我的問題是關於(我不得不改變一些變量的名字,才能夠發佈)
case R.id.save:
SAVE_DIALOG = R.id.save;
AlertDialog.Builder save_alert = new AlertDialog.Builder(this,3);
edit = new EditText(this);
edit.setSingleLine();
save_alert.setTitle("Please enter a name to save as");
save_alert.setView(edit);
save_alert.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
if(edit.getText().toString().trim().isEmpty()){
Toast toast = Toast.makeText(getApplicationContext(), "Name must not be blank", Toast.LENGTH_LONG);
toast.show();
return;
}
else {
File makeDirectory = new File("data/data/com.project.project/databases/stored_x");
if(!makeDirectory.isDirectory())
makeDirectory.mkdir();
FileChannel fromChannel = null;
FileChannel toChannel = null;
try {
File input = new File("data/data/com.project.project/databases/x.db");
//File output = new File("data/data/com.project.project/databases/stored_x/"+ edit.getText() +".db");
File output = new File("data/data/com.project.project/databases/stored_x/"+ edit.getText());
FileInputStream in = new FileInputStream(input);
FileOutputStream out = new FileOutputStream(output);
fromChannel = in.getChannel();
toChannel = out.getChannel();
fromChannel.transferTo(0, fromChannel.size(), toChannel);
}
catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
finally {
try {
fromChannel.close();
}
catch (IOException e) {
e.printStackTrace();
}
try {
toChannel.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
}
});
save_alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog saveAlert = save_alert.create();
saveAlert.setCanceledOnTouchOutside(true);
saveAlert.show();
break;
用戶按下保存按鈕後什麼,會出現一個警告對話框,詢問用戶名稱以將文件另存爲。在用戶輸入名稱並按下ok後,文件被複制並存儲到我在「data/data/com.project.project/databases/stored_x /」中創建的文件夾中。因此,我只是製作.db的副本文件並把它放在別的地方。
爲了加載我做了類似的保存,除了我選擇文件視圖的列表視圖,並用此文件替換當前的x.db,現在稱它爲x.db.
一切工作正常,並將爲最終用戶正常工作,但我只是好奇,如果這是它應該完成的方式。
如果所有的數據庫都有相同的表,爲什麼不把它們合併成一個,並有一個類型字段來區分它們彼此?看起來有一個可變數量的數據庫是一個黑客的做法。 – 2012-01-11 22:42:21
有什麼機會可以給我一個例子嗎?我對數據庫工作經驗不足。 – JaRay 2012-01-12 15:43:20