动态导入h2中的csv

问题描述 投票:2回答:2

我正在寻找一个解决方案,用于在h2数据库中导入任何带有Java的csv文件(或在运行时使用Java应用程序计算的SQL)。一种可能性是首先编写动态文件并在创建后在h2数据库连接上运行“脚本”。我的主要问题是我动态创建csv文件,列号和Label值可能不同。获取Connection的环境,在h2上运行scribt并在应用程序运行期间创建文件仍然存在。

现在我发现很多解决方案,如果我知道csv结构,但我以前不知道它。另一个问题是,典型的东西并不确定(如果更容易找到一个解决方案,就像说所有都是双重的那样。

我需要这个的原因是,我想在图表中显示数据集(线图)。有时我需要前两行作为x轴。有时我必须更多地显示一行(因此在csv中有一个或多个ylabel)

我想在数据库中拥有这些数据的原因是我想要根据x轴标准显示最小值和平均值。 (smt。显示每月,每天,每周)。因此,我们的想法是通过创建数据并通过DATE(DATE,TIME)读取Chart i Group来设置日期格式。

示例:我的基本csv示例

DATE,TIME,label1  ,  y2       ,line3  ,...  (labelNames have no equality)

20160101,0115, any int,any double ,any int,...

20160101,0130, ...    , ...       , ...   ,..   (if there is no messure 

20160101,0145, ...    ,  .....    , ---   ,..    the placefolder is '---')

20160101,0200, ....

20160102,...

所以有时我的结果csv似乎如下:

DATE,TIME,label1,y2

或者像这样:

DATETIME,label1,y2

或这个:

DATE,y2,another4

我们可以确定所有线都有相同的长度。标签在第一行。我希望你明白这个主意。如果你有一个更好的解决方案来解决它我也会听那个!(sry的风格不知道如何制作一张桌子)

谢谢你的任何命令!

java csv h2
2个回答
3
投票

可以肯定的是使用这个SQL命令:

CREATE TABLE TEST AS SELECT * FROM CSVREAD('test.csv'); <<from h2 docu>>

这样,所有列都将创建为具有匹配大小的varchar。

但之后,如果您想使用此数据,则必须知道所需的列(位置或列名称)以及要解析数据的类型。

当然,可以尝试所有可能性并捕获每个例外。如果什么都没有,你可以放弃这个措施继续下去,但这不是最好的做法。


0
投票

默认情况下,所有列数据类型都设置为varchar,如果执行此选择,则进行此查询。

CREATE TABLE TEST
(
  ID INT PRIMARY KEY,
  Col1 VARCHAR(55),
  Col2 INT(55)
) 
AS 
SELECT * 
FROM CSVREAD('here file path complete\test.csv');
© www.soinside.com 2019 - 2024. All rights reserved.