【问题标题】:Import csv in h2 dynamically动态导入h2中的csv
【发布时间】:2016-10-28 18:05:09
【问题描述】:

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

如果我知道 csv 结构但我以前不知道它,现在我找到了很多解决方案。另一个问题是类型不确定(如果更容易找到解决方案,假设所有都是双精度的。

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

我想在数据库中保存这些数据的原因是我曾经想根据 x 轴标准显示该集合的最小最大值和平均值。 (smt. 每月、每天、每周显示)。所以我们的想法是通过创建数据并通过DATE(DATE,TIME) 读取图表 i 组来设置日期格式。

例子: 我的基本 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

我们可以确定所有行的长度相同。标签在第一行。我希望你能明白。如果您有更好的解决方案来解决它,我也会听!(对于样式不知道如何制作表格)

感谢您的任何命令!

【问题讨论】:

  • 什么是“动态文件”?另外,请检查您的键盘 - Shift 键似乎坏了。

标签: java csv h2


【解决方案1】:

使用这个 SQL 命令肯定会奏效:

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

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

但是在那之后,所以如果您想处理这些数据,您必须知道您需要哪一列(位置或列名)以及您要将数据解析为哪种类型。

当然可以尝试所有可能性并捕获每个异常。如果没有任何问题,您可以放弃此措施并继续进行,但这不是最佳做法。

【讨论】:

  • 我尝试在 linux 系统中使用这种方式,我在资源文件中声明了一个 sql 脚本并在同一文件位置添加 test.csv,但是,每次执行此 sql 时我都会得到 java.io .FileNotFoundException 错误,你知道为什么吗?
【解决方案2】:

默认情况下,所有列的数据类型都设置为 varchar,如果你自己做这个选择,那么你做这个查询。

CREATE TABLE TEST
(
  ID INT PRIMARY KEY,
  Col1 VARCHAR(55),
  Col2 INT(55)
) 
AS 
SELECT * 
FROM CSVREAD('here file path complete\test.csv');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-03
    • 2014-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 2019-06-20
    • 1970-01-01
    相关资源
    最近更新 更多