我正在寻找在 h2 数据库中使用 Java(或在运行时使用 Java 应用程序计算的 SQL)导入任何 csv 文件的解决方案。一种可能性是首先编写一个动态文件并在创建后在 h2 数据库连接上运行“脚本”。我的主要问题是我动态创建 csv 文件,列号和标签值可能不同。用于获取连接、在 h2 上运行脚本并在应用程序运行期间创建文件的环境仍然存在。
现在我找到了很多解决方案,如果我知道 csv 结构,但我以前不知道。另一个问题是类型永远不确定(如果更容易找到解决方案,可以说都是双重的。
我需要这个的原因是,我想在图表(折线图)中显示数据集。有时我需要前两行作为 x 轴。有时我必须显示一行有时更多(所以在 csv 中有一个 ylabel 或更多)
我想在数据库中保存这些数据的原因是我想根据 x 轴标准显示该集合的最小最大值和平均值。(smt。显示每月,每天,每周)。所以这个想法是通过创建数据并通过读取 Chart i Group by 数据来设置日期格式DATE(DATE,TIME)。
示例:我的基本 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,...
Run Code Online (Sandbox Code Playgroud)
所以有时我得到的 csv 看起来像:
DATE,TIME,label1,y2
Run Code Online (Sandbox Code Playgroud)
或者像这样:
DATETIME,label1,y2
Run Code Online (Sandbox Code Playgroud)
或这个:
DATE,y2,another4
Run Code Online (Sandbox Code Playgroud)
我们可以确定所有行都具有相同的长度。标签在第一行。我希望你能明白。如果你有更好的解决方案来解决它,我也会听!(因为风格不知道如何制作桌子)
感谢您的任何命令!
小智 9
可以肯定的是使用这个 SQL 命令:
CREATE TABLE TEST AS SELECT * FROM CSVREAD('test.csv'); <<from h2 docu>>
Run Code Online (Sandbox Code Playgroud)
这样,所有列都将创建为具有匹配大小的 varchar。
但在那之后,如果你想处理这些数据,你必须知道你需要哪一列(位置或列名)以及你想要解析数据的类型。
当然,可以尝试所有可能性并捕获每个异常。如果没有任何问题,您可以丢弃此措施并继续,但这不是最佳做法。
小智 5
默认情况下,所有列的数据类型都设置为 varchar,如果这样做自己做出选择,那么您进行此查询。
CREATE TABLE TEST
(
ID INT PRIMARY KEY,
Col1 VARCHAR(55),
Col2 INT(55)
)
AS
SELECT *
FROM CSVREAD('here file path complete\test.csv');
Run Code Online (Sandbox Code Playgroud)