我需要将SQL查询应用于CSV文件(以逗号分隔的文本文件)。我的SQL是从其他工具预定义的,不符合更改条件。它可能包含FROM部分中的嵌入式选择和表别名。
对于我的任务,我发现了两个提供JDBC驱动程序的开源(这是一个项目要求)库:
这些是我遇到的问题:
从我考虑/试过的4件事中,只有3件和4件对我来说是可行的。有关这些或任何其他方式我可以查询我的CSV文件的任何建议吗?
干杯
答案 0 :(得分:9)
我会将数据加载到HSQL(HypersonicSQL)中。纯Java,正确的SQL,经过充分验证。几乎任何其他东西都有更大的足迹。
答案 1 :(得分:3)
如果您的SQL是预定义的并且无法更改,那么您最好的选择是将CSV加载到数据库中并对其运行查询。
Apache Derby是一个可行的选择,MySQL也是如此,它甚至有CSV storage engine或PostgreSQL。
您的SQL是否使用任何专有功能/扩展?如果是这样,那可能会限制您的选择。
答案 2 :(得分:3)
我会说嵌入式数据库。我建议使用Javadb(内置于Java API中的Derby)或H2,如果你不关心是否需要额外的依赖。
答案 3 :(得分:1)
如果您想将Java程序中的csv文件视为数据库,您应该查看h2 database engine.它非常支持读取/写入CSV文件和使用内存数据库。它是hsql的后续版本,速度更快,并且具有附加功能。您可以在h2教程中阅读有关csv支持的内容。
答案 4 :(得分:1)
也许有点晚了,对不起。
我一直在开发csvjdbc一年多了,几周后我就获得了该项目的“管理员”权限,所以我已经能够发布我生产的最新版本。它完全符合我们所需要的(我们:我和我现在的同事),并且我在添加错误时会添加内容。
现在看看它并再次决定。 (Web文档仍需要审阅,为了更好地了解,请检查非常广泛的测试用例)。
答案 5 :(得分:0)
有一个Groovy脚本gcsvsql,它允许您将csv文件视为数据库表,包括连接。使用gcsvsql,您可以执行以下操作:
gcsvsql“select * from people.csv 年龄> 40"
gcsvsql“选择 people.name,children.child来自 people.csv,children.csv在哪里 people.name = children.name“
gcsvsql“从中选择avg(得分) people.csv年龄< 40"
您可以在此处的Google代码中找到此脚本,该脚本基于h2数据库引擎:
答案 6 :(得分:0)