使用Java将Access DB查询数据输出到csv文件
我能够打开数据库文件并获取查询名称和语句。如何将查询数据输出到csv?我以为他会这么做,但没用使用Java将Access DB查询数据输出到csv文件,java,csv,jackcess,Java,Csv,Jackcess,我能够打开数据库文件并获取查询名称和语句。如何将查询数据输出到csv?我以为他会这么做,但没用 Database db = Database.open(new File(args[0])); for(Query query : db.getQueries()) { System.out.println(query.getName() + ": " + query.toSQLString()); if query.getName(
Database db = Database.open(new File(args[0]));
for(Query query : db.getQueries()) {
System.out.println(query.getName() + ": " + query.toSQLString());
if query.getName() = "thequerytooutput" {
BufferedWriter csvOut = new BufferedWriter(new OutputStreamWriter(System.out));
ExportUtil.exportWriter(db, query.getName(), csvOut, true, null, '"',
SimpleExportFilter.INSTANCE);
}
}
我认为更好的选择是首先将数据库中的值存储到一个“二维”字符串列表中(我假设您知道如何做到这一点[如果不知道,请告诉我,我将进一步澄清])。然后使用FileWriter将数组写入CSV文件 这个例子取自
List rows=Arrays.asList(
asList(“Jean”、“author”、“Java”),
asList(“David”、“editor”、“Python”),
asList(“Scott”、“editor”、“Node.js”)
);
FileWriter csvWriter=新的FileWriter(“new.csv”);
csvWriter.append(“名称”);
csvWriter.追加(“,”);
csvWriter.append(“角色”);
csvWriter.追加(“,”);
csvWriter.append(“主题”);
csvWriter.append(“\n”);
对于(列表行数据:行){
追加(String.join(“,”,rowData));
csvWriter.append(“\n”);
}
csvWriter.flush();
csvWriter.close();
ExportUtil
不运行查询,它只转储表。您需要提供有效的表名作为第二个参数。如前所述,Jackcess无法执行sql查询。请描述它如何不像错误消息那样工作,或者如果没有错误,则是实际输出。这是我在com.healthmarketscience.Jackcess.Cursor$Id上的线程“main”java.lang.NullPointerException中收到的错误消息。Cursor.java:1490位于com.healthmarketscience.jackcess.Cursor$tablecancursor.(Cursor.java:1334)位于com.healthmarketscience.jackcess.Cursor$tablecancursor.(Cursor.java:1322)位于com.healthmarketscience.jackcess.ExportUtil.exportWriter(ExportUtil.java:271)在DumpQuery.main(未知来源)感谢您的建议。我应该在脚本import com.healthmarketscience.jackcess.query.query中包含我使用的导入;导入com.healthmarketscience.jackcess.Database;导入com.healthmarketscience.jackcess.ExportUtil;导入com.healthmarketscience.jackcess.SimpleExportFilter;我想如果我能将查询行设置为a,那么我应该能够按照您的建议执行。好的,很好,试试看。如果你做不到,我以后会帮助你的。现在我要离开家,所以在接下来的2-3个小时内我不会碰我的电脑。@zjb嗨,我回来了。你能做吗?不,我没有(仍在努力哦,别担心,我相信你能做到。现在我在床上,快要睡觉了,但我明天会帮你解决这个问题。同时,你能澄清你用来访问数据库的查询以及结果集有多少列和行吗?:)
List<List<String>> rows = Arrays.asList(
Arrays.asList("Jean", "author", "Java"),
Arrays.asList("David", "editor", "Python"),
Arrays.asList("Scott", "editor", "Node.js")
);
FileWriter csvWriter = new FileWriter("new.csv");
csvWriter.append("Name");
csvWriter.append(",");
csvWriter.append("Role");
csvWriter.append(",");
csvWriter.append("Topic");
csvWriter.append("\n");
for (List<String> rowData : rows) {
csvWriter.append(String.join(",", rowData));
csvWriter.append("\n");
}
csvWriter.flush();
csvWriter.close();