现在,我有一个TableLayout,我根据某些列和.db文件中的每一行填充。该表是基于单个.db文件填充的,我将从现在开始调用x。每次重新创建活动时,我的populate方法(填充表的内容)都会检查x.db中的内容。表格中的每一行都有相同的3列,但是如果您长按一行,则可以看到该行的每个细节(详细信息计算其中一列显示,每行的计算不同)。
从这里,用户可以选择计算总计,保存当前.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;
用户按下保存按钮后,会出现一个警告对话框,询问用户输入名称以保存文件。在用户输入名称并按下确定后,文件被复制并存储在我在“data / data / com.project.project / databases / stored_x /”中创建的文件夹中。所以我只是制作.db的副本将文件放在其他地方。
为了加载我做了类似保存的事情,除了我选择文件视图列表视图并用这个文件替换当前的x.db,现在称它为x.db.
一切正常,并且最终用户可以正常工作,但我只是好奇这是否应该这样做。
答案 0 :(得分:0)
好的,所以你的查询获取指定类型的所有项目都是这样的......
SELECT * FROM table_name WHERE type='some_type'
将数据插入数据库就像这样......
INSERT INTO table_name ('name', 'description', 'type') VALUES ('Foo', 'Bar', 'some_type')
您可以通过运行此查询获取不同类型的列表
SELECT DISTINCT type FROM table_name
Android已经构建了类,使得查询数据库变得更加简单。 SQLiteDatabase使得查询数据库变得更加容易。我更喜欢使用rawQuery()方法,但如果您愿意,可以使用包装器方法。以下是使用rawQuery方法的示例。
db.rawQuery("SELECT * FROM table_name WHERE type=?", new String[] {"some_type"});