我正在尝试从我的 sqlite 数据库中获取数据并将其写入 csv 文件并在完成写入后通过电子邮件发送信息。我在数据库中只有一个包含 3 列的表。我有 DBAdapter 和一个具有按钮的类用户必须按下才能导出数据。
这是我试过的代码 Exportdata.java
try {
root = Environment.getExternalStorageDirectory();
Log.i(TAG,"path.." +root.getAbsolutePath());
//check sdcard permission
if (root.canWrite()) {
File fileDir = new File(root.getAbsolutePath()+"/fun/");
fileDir.mkdirs();
// Log.d("DATABASE", db.getAllBYname());
File file= new File(fileDir, "itisfun.csv");
FileWriter filewriter = new FileWriter(file);
BufferedWriter out = new BufferedWriter(filewriter);
out.write("I m enjoying......dude..............." );
out.close();
}
} catch (IOException e) {
Log.e("ERROR:---", "Could not write file to SDCard" + e.getMessage());
}
此代码确实在 SD 卡中创建了文件,但问题是我无法使它获取 sqlite 数据库数据并将其写入文件中,如代码所示。我卡住了,请帮我举个例子或用正确的方式编辑我的代码解决方案。
最佳答案
我使用此例程以 CSV 格式将 SQLite 数据库转储到 SD 卡上的文件中:
private Boolean backupDatabaseCSV(String outFileName) {
MyLog.d(TAG, "backupDatabaseCSV");
Boolean returnCode = false;
int i = 0;
String csvHeader = "";
String csvValues = "";
for (i = 0; i < GC.CURCOND_COLUMN_NAMES.length; i++) {
if (csvHeader.length() > 0) {
csvHeader += ",";
}
csvHeader += "\"" + GC.CURCOND_COLUMN_NAMES[i] + "\"";
}
csvHeader += "\n";
MyLog.d(TAG, "header=" + csvHeader);
dbAdapter.open();
try {
File outFile = new File(outFileName);
FileWriter fileWriter = new FileWriter(outFile);
BufferedWriter out = new BufferedWriter(fileWriter);
Cursor cursor = dbAdapter.getAllRows();
if (cursor != null) {
out.write(csvHeader);
while (cursor.moveToNext()) {
csvValues = Long.toString(cursor.getLong(0)) + ",";
csvValues += Double.toString(cursor.getDouble(1))
+ ",";
csvValues += Double.toString(cursor.getDouble(2))
+ ",";
csvValues += "\"" + cursor.getString(3) + "\",";
csvValues += Double.toString(cursor.getDouble(4))
+ ",";
csvValues += Double.toString(cursor.getDouble(5))
+ ",";
csvValues += "\"" + cursor.getString(6) + "\",";
csvValues += Double.toString(cursor.getDouble(7))
+ ",";
csvValues += Double.toString(cursor.getDouble(8))
+ ",";
csvValues += Double.toString(cursor.getDouble(9))
+ "\n";
out.write(csvValues);
}
cursor.close();
}
out.close();
returnCode = true;
} catch (IOException e) {
returnCode = false;
MyLog.d(TAG, "IOException: " + e.getMessage());
}
dbAdapter.close();
return returnCode;
}
GC 是我的全局常量类,其中包含表列名称。列名用于构成 CSV 文件中的标题行。 getAllRows 在数据库适配器中并返回表中的所有行。 while 转储返回的所有行。长值以逗号分隔,文本值被引用并以逗号分隔。 MyLog.d 在测试模式下执行 Log.d,在生产模式下什么也不做。 dbAdapter 在函数外部定义为全局变量:
DatabaseAdapter dbAdapter = null;
在onCreate中初始化为:
dbAdapter = new DatabaseAdapter(getApplicationContext());
dbAdapter 在 Activity 中的多个函数中使用。如果您全局定义数据库适配器,请确保在使用时将每个 dbAdapter.open() 与 dbAdapter.close() 配对。另外,不要忘记关闭您打开的每个游标。
注意:csvValues 是每个 SQLite 行中返回的列的串联。对于 SQLite 游标中返回的每一行,csvValues 被写为 CSV 表中的一行。
关于android - 将 sqlite 导出到 csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14509026/
我正在使用ruby1.9解析以下带有MacRoman字符的csv文件#encoding:ISO-8859-1#csv_parse.csvName,main-dialogue"Marceu","Giveittohimóhe,hiswife."我做了以下解析。require'csv'input_string=File.read("../csv_parse.rb").force_encoding("ISO-8859-1").encode("UTF-8")#=>"Name,main-dialogue\r\n\"Marceu\",\"Giveittohim\x97he,hiswife.\"\
查看Ruby的CSV库的文档,我非常确定这是可能且简单的。我只需要使用Ruby删除CSV文件的前三列,但我没有成功运行它。 最佳答案 csv_table=CSV.read(file_path_in,:headers=>true)csv_table.delete("header_name")csv_table.to_csv#=>ThenewCSVinstringformat检查CSV::Table文档:http://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV/Table.html
CSV.open(name,"r").eachdo|row|putsrowend我得到以下错误:CSV::MalformedCSVErrorUnquotedfieldsdonotallow\ror\n文件名是一个.txt制表符分隔文件。我是专门做的。我有一个.csv文件,我转到excel,并将文件保存为.txt制表符分隔的文件。所以它是制表符分隔的。CSV.open不应该能够读取制表符分隔的文件吗? 最佳答案 尝试像这样指定字段分隔符:CSV.open("name","r",{:col_sep=>"\t"}).eachdo|row|
我正在尝试将一个简单的CSV文件读入HTML表格以在浏览器中显示,但我遇到了麻烦。这就是我正在尝试的:Controller:defshow@csv=CSV.open("file.csv",:headers=>true)end查看:输出:NameStartDateEndDateQuantityPostalCode基本上我只获取标题,而不会读取和呈现CSV正文。 最佳答案 这最终成为最终解决方案:Controller:defshow#OpenaCSVfile,andthenreaditintoaCSV::Tableobjectforda
最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路
我在Rails3.1项目中有以下助手-我只是想知道是否有办法测试CSV.generate调用。我很想说我知道如何去做,但事实是我什至不知道从哪里开始。任何想法表示赞赏。require'csv'moduleAdmin::PurchasesHelperdefcsv_purchase_listcolumns=['course','amount','first_name','last_name','contact_phone','contact_mobile','created_at']CSV.generate(:col_sep=>";",:row_sep=>"\r\n",:headers=>
在Ruby1.9中,我如何从ARGF中读取CSV?我尝试了以下方法,但没有打印任何内容:require'csv'CSV(ARGF).readdo|row|prowendhttp://www.ruby-doc.org/core-1.9.3/ARGF.htmlhttp://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV.html 最佳答案 如果你想偷懒你可以试试:CSV.new(ARGF.file).eachdo|row|...end来源:http://www.ruby-doc.org/std
有没有办法跳过CSV文件的第一行,让第二行作为标题?我有一个CSV文件,第一行是日期,第二行是标题,所以我需要能够在遍历它时跳过第一行。我尝试使用slice但它会将CSV转换为数组,我真的很想将其读取为CSV,以便我可以利用header。 最佳答案 根据您的数据,您可以使用另一种方法和skip_lines-option此示例跳过所有以#开头的行require'csv'CSV.parse(DATA.read,:col_sep=>';',:headers=>true,:skip_lines=>/^#/#Markcomments!)do|
我的问题很简单:我是否必须在使用RubyonRails的类上require'csv'?如果我打开一个railsconsole并尝试使用CSVgem它可以工作,但我必须在文件中这样做吗? 最佳答案 CSVlibrary是ruby标准库的一部分;它不是gem(即第三方库)。与所有标准库(与核心库不同)一样,csv不会由ruby解释器自动加载。所以是的,在您的应用程序中某处您确实需要要求它:irb(main):001:0>CSVNameError:uninitializedconstantCSVfrom(irb):1from/Us
出于某种原因,heroku尝试要求dm-sqlite-adapter,即使它应该在这里使用Postgres。请注意,这发生在我打开任何URL时-而不是在gitpush本身期间。我构建了一个默认的Facebook应用程序。gem文件:source:gemcuttergem"foreman"gem"sinatra"gem"mogli"gem"json"gem"httparty"gem"thin"gem"data_mapper"gem"heroku"group:productiondogem"pg"gem"dm-postgres-adapter"endgroup:development,:t