使用Java将数组数据插入数据库

使用Java将数组数据插入数据库,java,jakarta-ee,Java,Jakarta Ee,我对这段代码有问题。我想从平面文件中提取数据并将其存储到数据库中。平面文件格式如下所示:- DT|00000001|TMDWH|UNIFI|00380520160|MAH SIEW YIN|11 |JALAN PP 2/8|TAMAN PUTRA PRIMA|PUCHONG|SELANGOR|47100|MALAYSIA|801110-14-5498||||||VOBB||A||11|JALAN PP 2/8|||TAMAN PUTRA PRIMA DT|00000002|TMDWH|UNI

我对这段代码有问题。我想从平面文件中提取数据并将其存储到数据库中。平面文件格式如下所示:-

DT|00000001|TMDWH|UNIFI|00380520160|MAH SIEW YIN|11  |JALAN PP 2/8|TAMAN PUTRA PRIMA|PUCHONG|SELANGOR|47100|MALAYSIA|801110-14-5498||||||VOBB||A||11|JALAN PP 2/8|||TAMAN PUTRA PRIMA

DT|00000002|TMDWH|UNIFI|00322012091|JUNITA BINTI JAMAL|6 10 KONDOMINIUM FAJARIA|JALAN PANTAI BARU|KUALA LUMPUR|KUALA LUMPUR|WILAYAH PERSEKUTUAN|59200|MALAYSIA|800129-09-5078||||||VOBB||A|||JALAN PANTAI BARU|6|KONDOMINIUM FAJARIA|KUALA LUMPUR                                                                                     
代码:

我真的希望这里的任何人都能帮助我

当前结果:

没有数据存储到数据库中,代码已成功编译

预期结果

所有数据将存储到数据库数据_999中


编制报表的索引以1为基础:

更改
stmt.setString(0,卢旺达问题国际法庭)
stmt.setString(1,卢旺达问题国际法庭)。(并调整以下各项)

请把你得到的例外情况贴出来。这将给我们更多的提示,什么地方可能出了问题

编辑:


表中的所有字段是否都是
varchar
类型?您的行中有一些值可能被建模为
int
s。

SQL API与我能想到的其他java API不同,它是基于一的,这意味着它从一开始计数。您的代码正在尝试设置第0个字段,该字段应该是爆炸的

作为旁注,因为每个字段都有很多特殊处理,所以您可以通过简单地迭代字段并设置stmt参数来用几行代码替换所有代码,即不要为每个字段使用变量:

// fyi, the regex of this split trims automatically
String[] fields = tmp.replace("\""," ").replace("\'","\'\'").trim().split("\\s*\\|\\s*");
// Do any special field processing (most need none)
field[0] = getiCtr(parseMSISDN(field[5])); // for example - just do what you need
// Now set all the SQL params
int col = 0;
for (String field : fields) {
    stmt.setString(++col, field); // Note: SQL API is 1-based (not zero-based)
}

为什么要在这里放置javascript标记?您应该在这里发布您得到的异常(而不仅仅是记录消息,而是将整个异常记录在logger.error(s.getMessage())中)亲爱的Mark Brammik,我很抱歉,因为标记javascript..huhu..erm,我没有得到任何异常。日志没有显示任何内容。这是我现在的大问题。这就是为什么我不知道发生了什么,这段代码有什么问题。亲爱的Bohemian,谢谢你的建议,但你能告诉我为什么数据不能存储到数据库中吗?。。这个代码有什么问题?@Siti在我的代码中看到注释:
//注意:SQL API是基于1的(不是基于零的)
。没有字段
0
,它从字段
1开始计数亲爱的波希米亚人,谢谢你提供的信息。我有一个问题。如何从每个数组中获取长度。字段[5]。长度?
字段[5]
只是一个
字符串,所以
字段[5].length()
将是它的长度亲爱的波希米亚人,我的长度为0。可能出了问题。我该怎么办?亲爱的黑格,我已经更改了它,但结果仍然是一样的。数据没有存储到数据中。\u 999。我的代码中有错误吗?我真的需要帮助。非常感谢……)你使用什么DBMS?您正在从命令行运行程序吗?也许您可以使用
s.printStackTrace(System.out)打印异常?亲爱的Hage,使用logger.info打印StackTrace与我的代码有什么不同?亲爱的Hage,我使用的是Sql plus。我不知道你的
记录器
是什么。。。printStackTrace打印完整的堆栈跟踪(即所有方法调用),而不仅仅是异常消息。另外,消息
No data store to database,…
是来自SQL Plus还是在代码中的某个地方生成的?
// fyi, the regex of this split trims automatically
String[] fields = tmp.replace("\""," ").replace("\'","\'\'").trim().split("\\s*\\|\\s*");
// Do any special field processing (most need none)
field[0] = getiCtr(parseMSISDN(field[5])); // for example - just do what you need
// Now set all the SQL params
int col = 0;
for (String field : fields) {
    stmt.setString(++col, field); // Note: SQL API is 1-based (not zero-based)
}