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