gpt4 book ai didi

java - 准备语句到数据库设置变量类型处理

转载 作者:行者123 更新时间:2023-12-01 10:15:29 25 4
gpt4 key购买 nike

这个问题与从字符串散列生成准备好的语句以及处理一些日期、时间和整数字符串有关。

我有一个数据库,该数据库的列名存储在列表“columns”中。

我还有一个 HashMap “pdf”,它存储 PDF 文档中的字段名称和值。

下面的代码根据 pdf HashMap 从数据库中查找匹配的列名称,如果找到则将其插入。

StringJoiner col = new StringJoiner(",");
StringJoiner val = new StringJoiner(",");
//First Iteration: Create the Statement
for(String c : columns) {
//Your PDF has a matching formfield
if(pdf.hasKey(c)) {
col.add(c);
val.add("?");
}
}
String sql = String.format("INSERT INTO table (%s) VALUES (%s)", col.toString(), val.toString());
try(PreparedStatement insert = con.prepareStatement(sql)) {
//Insert position in statement
int pos = 0;
//Second iterations: Bind the values to the statement
for(String c : columns) {
//Your PDF has a matching formfield
if(pdf.hasKey(c)) {
insert.setString(++pos, pdf.get(c));
}
}
insert.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}

这很有效,但我需要处理一些情况。 pdf 具有以下字段:Int 和日期、时间:

年龄(国际)出生日期(日期)分数(国际)开始日期(日期)时间开始(时间)

我还想修改数据库,使其只有一个 DateTimeStart 字段来保存两者。

现在我确实尝试用以下方法来处理这个问题:

                if (c.toLowerCase().contains("date")) {
System.out.println("A Date field has been found: " +c);
DateTimeFormatter formatter = DateTimeFormat.forPattern ("dd/mm/yyyy");
DateTime startdt = formatter.parseDateTime(pdf.get(c));
insert.setDate(++pos, startdt);
}
if (pdf.containsKey(c) && !c.toLowerCase().contains("date")) {
insert.setString(++pos, pdf.get(c));
}

但这不起作用。对于初学者来说,setDate 不接受 DateTime 对象,即使它们只包含日期。另外,试图了解新的准备好的语句,数据库现在只包含“DateTimeStart”而不是“DateStart”和“TimeStart”,这让我很头痛。

如有任何帮助,我们将不胜感激。我从 Java7 起就已经在使用 Joda。

干杯

-铝

                if (c.toLowerCase().contains("date")) {
System.out.println("A Date field has been found: " +c);
DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/mm/yyyy kk:mm");
long millis = formatter.parseMillis(pdf.get("DateStart") +" " +pdf.get("TimeStart"));
Timestamp timeStamp = new Timestamp(millis);
insert.setTimestamp(++pos, timeStamp);
}

最佳答案

标准 JDBC 仅接受日期/时间作为实例

java.sql.Date       (date only)
java.sql.Time (date/time with 1 second resolution)
java.sql.Timestamp (date/time with fractional second resolution)

您必须将 Joda 对象转换为其中之一,并在 上使用正确的方法(setDatesetTimesetTimestamp) >PreparedStatement.

关于java - 准备语句到数据库设置变量类型处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35927203/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com