Поскольку он стоит прямо сейчас, у меня есть 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.
Все работает нормально и будет работать нормально для конечных пользователей, но мне просто интересно, если это так, как это должно быть сделано.
Если все базы данных имеют одни и те же таблицы, почему бы не объединить их все в один и иметь поле типа, чтобы отличать их друг от друга? Кажется, что наличие большого количества баз данных - это хакерский способ сделать это. –
Не могли бы вы показать мне пример? Я очень неопытен, работая с базами данных. – JaRay