Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过JDBC在CSV文件上执行SQL_Java_Sql_Text_Jdbc_Csv - Fatal编程技术网

Java 通过JDBC在CSV文件上执行SQL

Java 通过JDBC在CSV文件上执行SQL,java,sql,text,jdbc,csv,Java,Sql,Text,Jdbc,Csv,我需要对CSV文件(逗号分隔的文本文件)应用SQL查询。我的SQL是从另一个工具预定义的,不能更改。它可能在FROM零件中包含嵌入的SELECT和表格别名 在我的任务中,我找到了两个提供JDBC驱动程序的开源库(这是项目要求): 创建ApacheDerby数据库,将所有CSV作为表加载并执行查询 以下是我遇到的问题: 它不接受SQL的语法(它使用内部选择和表别名)。此外,自2004年以来一直没有维持 我无法让它工作,因为它依赖于SAX解析器,在解析其他文档时会导致异常。同样,自2004年以

我需要对CSV文件(逗号分隔的文本文件)应用SQL查询。我的SQL是从另一个工具预定义的,不能更改。它可能在FROM零件中包含嵌入的SELECT和表格别名

在我的任务中,我找到了两个提供JDBC驱动程序的开源库(这是项目要求):

  • 创建ApacheDerby数据库,将所有CSV作为表加载并执行查询
  • 以下是我遇到的问题:

  • 它不接受SQL的语法(它使用内部选择和表别名)。此外,自2004年以来一直没有维持
  • 我无法让它工作,因为它依赖于SAX解析器,在解析其他文档时会导致异常。同样,自2004年以来没有变化
  • 没有检查它是否支持语法,但这似乎是一项开销。它需要几个实体定义(虚拟数据库、绑定)。从邮件列表中,他们告诉我上一个版本支持运行时创建所需的对象。有没有人将它用于这样简单的任务(通常它可以连接到多种类型的数据,如CSV、XML或其他数据库,并创建一个虚拟的、统一的数据库)
  • 这样做容易吗
  • 从我考虑/尝试的4件事情来看,只有3件和4件在我看来是可行的。关于这些问题有什么建议,或者我可以通过其他方式查询我的CSV文件吗


    干杯

    如果您的SQL是预定义的且无法更改,那么您最好的选择是将CSV加载到数据库中并对其运行查询

    ApacheDerby是一个可行的选择,我们也是,它甚至有一个or


    您的SQL是否使用任何专有函数/扩展?如果是这样,那可能会限制您的选择。

    我想说嵌入式数据库。如果您不关心额外的依赖关系,我建议使用Javadb(内置于JavaAPI中的Derby)或H2。

    我会将数据加载到HSQL(HypersonicSQL)中。纯Java,正确的SQL,经过良好验证。几乎其他任何东西都有更大的占用空间。

    有一个Groovy脚本gcsvsql,它允许您将csv文件视为数据库表,包括联接。使用gcsvsql,您可以执行以下操作:

    gcsvsql“从people.csv中选择* 年龄>40岁

    gcsvsql“选择 人物。姓名,儿童。儿童来源 people.csv,children.csv在哪里 people.name=children.name“

    gcsvsql“从中选择平均值(分数) people.csv,其中年龄<40“

    您可以在Google代码中找到这个基于h2数据库引擎的脚本:


    如果您想从Java程序中将csv文件视为数据库,您应该看看它对读取/写入csv文件和使用内存数据库的支持。它是hsql的后续产品,速度更快,并添加了更多功能。您可以在h2教程中阅读有关csv支持的内容。

    可能有点晚了,对此表示抱歉

    我已经开发了一年多了,从几个星期开始,我就拥有了该项目的“管理员”权限,所以我能够发布我制作的最新版本。它满足了所有“我们”的需要(我们:我和我现在的同事们),我在bug归档时添加了一些东西


    现在看一看,然后再作决定。(web文档仍然需要审阅,为了更好地理解,请检查测试用例,它们非常广泛)。

    我知道,这是一个非常古老的用例,但是

    是一个很酷的库,但是在将ResultSets映射到POJO时使用时存在一些问题。 第二件坏事是,没有对不同数据类型的良好支持


    玩过之后,我将使用一个愚蠢的CsvParser来读取文件,并将它们输入HsqlDB或类似的东西。

    是的,它使用子字符串和连接。在这篇博文中,你可以看到在Groovy脚本中使用h2是多么容易:嵌入式选择?表格别名?没有,那里还没有。但话说回来,你可以随意用一个不起作用的查询来提交一个bug报告,谁知道呢……事实上,HSQLDB是唯一建议的可以将现有CSV文件作为SQL表打开的解决方案。它允许直接在CSV文件上执行SQL查询和更新记录。Hi@Vladimir如果我要处理的CSV文件非常大(5到10 GB),该怎么办?我没有尝试使用HSQL处理那么大的文件,但文档中说最大的文件是8 TB(T,不是G)。您需要使用createcachedtable来避免将数据保留在内存中。看看HSQL->Text表:您报告过csvjdbc的问题吗?当前的维护人员(不再是我)在发现严重问题时非常及时。不,我没有。我无法在那里创建票证。您应该能够在登录/注册后在那里创建票证。不允许匿名用户创建或更新票证。我想为了避免垃圾邮件发送者。。。但更具体地说,你遇到了什么“问题”,你期望得到什么“良好的支持”?