Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.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
java中excel工作表中1条记录插入多条记录所需的逻辑_Java_Sql_Oracle - Fatal编程技术网

java中excel工作表中1条记录插入多条记录所需的逻辑

java中excel工作表中1条记录插入多条记录所需的逻辑,java,sql,oracle,Java,Sql,Oracle,在我的作业中,我必须开发代码从excel工作表中读取记录,并以定义的方式将记录插入数据库 我必须从包含5列的工作表中读取记录,并使用工作表行中的值在数据库中创建4条(工作表行中的值为-1)记录 例如,我的excel工作表包含5列,并包含以下记录 第1行(标题):第1列、第2列、第3列、第4列、第5列 第2行: 5,4,3,2,1 现在,我可以使用jxl库从excel工作表中读取记录,但我在创建逻辑时遇到了困难,无法将一条excel工作表记录作为4条记录插入DB中,如下例所示 第1行:12 第2行

在我的作业中,我必须开发代码从excel工作表中读取记录,并以定义的方式将记录插入数据库


我必须从包含5列的工作表中读取记录,并使用工作表行中的值在数据库中创建4条(工作表行中的值为-1)记录

例如,我的excel工作表包含5列,并包含以下记录

第1行(标题):第1列、第2列、第3列、第4列、第5列
第2行: 5,4,3,2,1

现在,我可以使用jxl库从excel工作表中读取记录,但我在创建逻辑时遇到了困难,无法将一条excel工作表记录作为4条记录插入DB中,如下例所示

第1行:12
第2行:23
第3行:34
第4行:45

我无法制定如何以上述方式在数据库中插入记录的逻辑,即Excel工作表中的1条记录将以上述方式在数据库中创建4条记录

在上述场景中还有一种情况

如果任何一列没有值,那么它应该取下一列的值 比如说

第1行(标题):第1列、第2列、第3列、第4列、第5列
第2行: 5,3,2,1

然后我应该创建3行,如下所示

第1行:1,2
第2行:2,3
第3行:3,5

请帮助我理解如何使用java实现上述场景

伪代码或算法也会有所帮助


使用的数据库:Oracle

如果您将行直接传递给数据库,则此查询应该很好:

with w(c1, c2, c3, c4, c5, id) as
(
   select 5,  4,  3,  2,  1, 10 from dual
   union all
   select 5,  null,  3,  2,  1, 20 from dual
   union all
   select null, 4,  null,  2,  1, 30 from dual
),
w2 as
(
  select decode(c1, null, 1, 0) + decode(c2, null, 1, 0) + decode(c3, null, 1, 0) + decode(c4, null, 1, 0) + decode(c5, null, 1, 0) nb_nulls,
         coalesce(c5, c4, c3, c2, c1) v5,
         coalesce(c4, c3, c2, c1) v4,
         coalesce(c3, c2, c1) v3,
         coalesce(c2, c1) v2,
         c1 v1,
         id
  from w
)
select v5, v4, nb_nulls, id from w2 where nb_nulls < 4
union all
select v4, v3, nb_nulls, id from w2 where nb_nulls < 3
union all
select v3, v2, nb_nulls, id from w2 where nb_nulls < 2
union all
select v2, v1, nb_nulls, id from w2 where nb_nulls < 1
order by id
;
我刚刚添加了
id
字段来更好地解释这个概念。对于每一行,我计算空值的数量,然后将值与
coalesce
右对齐。然后您只需使用一个简单的
where
来选择正确的行

V5  V4  NB_NULLS    ID
4   5   0   10
1   2   0   10
3   4   0   10
2   3   0   10
1   2   1   20
2   3   1   20
3   5   1   20
1   2   2   30
2   4   2   30