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
使用H2数据库,我可以对从Java阅读器(如StringReader)读取的CSV文本执行SQL查询吗?_Java_Sql_Database_Csv_H2 - Fatal编程技术网

使用H2数据库,我可以对从Java阅读器(如StringReader)读取的CSV文本执行SQL查询吗?

使用H2数据库,我可以对从Java阅读器(如StringReader)读取的CSV文本执行SQL查询吗?,java,sql,database,csv,h2,Java,Sql,Database,Csv,H2,是否有一种方法可以对存储在内存中的CSV文本执行SQL查询,并从Java读取器(如StringReader)读入 read(Reader Reader,String[]colNames)允许我检索包含所有行和列的结果集。但是,我实际上希望对从阅读器读取的CSV文本执行查询 背景-我收到一个包含每个实体的多个CSV节的文件,请参阅,在解析文件时,我将需要的每个CSV节存储在字符串中(每个都有一个字符串)。这应该不会使内存陷入困境,因为我只在内存中保留数据很短时间,而且每个CSV部分都相对较小)。我

是否有一种方法可以对存储在内存中的CSV文本执行SQL查询,并从Java读取器(如StringReader)读入

read(Reader Reader,String[]colNames)允许我检索包含所有行和列的结果集。但是,我实际上希望对从阅读器读取的CSV文本执行查询

背景-我收到一个包含每个实体的多个CSV节的文件,请参阅,在解析文件时,我将需要的每个CSV节存储在字符串中(每个都有一个字符串)。这应该不会使内存陷入困境,因为我只在内存中保留数据很短时间,而且每个CSV部分都相对较小)。我需要对这些CSV部分执行查询,以自定义格式构建文档


我可以将每个CSV节写入一个文件(作为一组文件)并使用CSVREAD,但我不想这样做,因为我需要我的应用程序尽可能快,拆分并将节写入磁盘将使硬盘驱动器崩溃。

这不可能直接实现,因为DBMS通常只能查询自己优化的数据存储。您必须将包含所述
org.h2.tools.Csv.read
的文本导入到表中,并对该表执行查询。该表可能是临时表,以防止在磁盘上进行任何写入,前提是内存足够。

您可以编写一个返回结果集的表,并使用该表生成所需的行。在用户定义的函数中,您可以使用H2中的Csv工具(实际上是任何Csv工具)。

Ah-我明白您的意思。因此,添加到H2数据库中可能是一个有用的功能:包括一个内置函数CSVREAD(stringcsvcontent)。。。与CSVREAD(文件名)类似,但不是传递CSV文件的名称,而是传递包含实际CSV内容的字符串。当然,这只有在CSV数据相对较小的情况下才有用。是的,我理解你的意思,但到目前为止,我还没有找到一个H2数据库Java API调用来直接从org.H2.tools.CSV.read(…)返回的结果集创建一个新表(临时表)。否则,我必须循环遍历resultset(Java)中的每一行,并将每一行插入新创建的临时表(非常冗长)。但是,请告诉我是否确实存在这样的JavaAPI调用(直接从resultset创建表)。