java通过JDBC在CSV文件上执行SQL
我需要对CSV文件(逗号分隔的文本文件)应用SQL查询。我的SQL是从另一个工具预定义的,不能更改。它可能在FROM零件中包含嵌入的SELECT和表格别名
在我的任务中,我找到了两个提供JDBC驱动程序的开源库(这是项目要求):
- CsvJdbc
- XlSQL
- JBoss Teiid
- 创建一个ApacheDerby数据库,将所有CSV作为表加载并执行查询李>
以下是我遇到的问题:
- 它不接受SQL的语法(它使用内部选择和表别名)。此外,自2004年以来,它一直没有得到维护李>
- 我无法让它工作,因为它有一个SAX解析器,在解析其他文档时会导致异常。同样,自2004年以来没有任何变化李>
- 还没有检查它是否支持语法,但似乎是一种开销。它需要几个实体定义(虚拟数据库、绑定)。从邮件列表中,他们告诉我上一个版本支持运行时创建所需的对象。有没有人用它来完成这么简单的任务(通常它可以连接到多种类型的数据,比如CSV、XML或其他数据库,并创建一个虚拟的、统一的数据库)李>
- 这样做容易吗李>
从我考虑/尝试的4件事来看,只有3件和4件在我看来是可行的。关于这些问题有什么建议,或者我可以用什么方式查询我的CSV文件
干杯
# 1 楼答案
也许有点晚了,抱歉
我开发csvjdbc已经一年多了,几周后我就拥有了该项目的“管理员”权限,所以我能够发布我制作的最新版本。它满足了所有“我们”的需要(我们:我和我现在的同事们),我在整理bug时添加了一些东西
现在看一看,然后再做决定。(web文档仍然需要审阅,为了更好地理解,请查看非常广泛的测试用例)
# 2 楼答案
如果SQL是预定义的且无法更改,那么最好的选择是将CSV加载到数据库中,并对其运行查询
Apache Derby是一个可行的选项,MySQL也是如此,它甚至有一个CSV storage engine或PostgreSQL
您的SQL是否使用任何专有函数/扩展?如果是这样,那可能会限制你的选择
# 3 楼答案
我想是嵌入式数据库。如果您不关心额外的依赖关系,我建议您选择Javadb(内置于JavaAPI中的Derby)或H2