gpt4 book ai didi

java - PostgreSQL 无法将空字符串转换为(空)日期值

转载 作者:行者123 更新时间:2023-11-29 13:39:21 31 4
gpt4 key购买 nike

我将使用 JDBC 将数据推送到 PostgreSQL
所以我在 Dao 中编写了这样的 Insert 代码。

public void insert(Connection con, List<InsertVo> list) throws Exception{
PreparedStatement pstmt = null;
int listSize = list.size();
int pstmtSetInt = 1;

try {
String sql = "insert into tableName "
+ "(colName1,colName2,colName3) "
+ "values ";
String addInsertSql = "(?,?,?::date)";
sql = addInsertQuery(sql, addInsertSql, listSize);
pstmt = con.prepareStatement(sql);
for (InsertVo vo : list) {
pstmt.setString(pstmtSetInt++, vo.getColName1());
pstmt.setInt(pstmtSetInt++, vo.getColName2());
pstmt.setString(pstmtSetInt++, vo.getColName3());
}
System.out.println(pstmt);

} catch (Exception e) {
e.printStackTrace();
throw e;
} finally {
try {
if (pstmt != null) {
pstmt.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

private String addInsertQuery(String sql, String addInsertSql, int listSize) {
for (int idx = 0; idx < listSize; idx++) {
sql = sql + addInsertSql;
if (listSize-1 != idx) {
sql = sql + ", ";
}
}
return sql;
}

有很多Insert语句,输入一次就会重复,所以写的时候增加'()'的个数。
但是,此代码的问题在于,如果日期部分包含 null 或像 "" 这样的空字符串,则会出现错误。
由于该部分不是 not null,因此它可以是 null""
底线是我想知道除了检查日期部分和提供不同的插入语句之外是否还有其他东西。

The ERROR message looks like this.
org.postgresql.util.PSQLException: ERROR: invalid input syntax for type date: ""


I checked again and found that if I change the value to "" NULL, the ERROR does not go into it.

//pstmt.setString(pstmtSetInt++, vo.getColName3());

String dateValue=vo.getColName3();
if (dateValue.equals("")) {
dateValue = null;
}
pstmt.setString(pstmtSetInt++, dateValue);

Thank you for your help.

最佳答案

I want to know if there's something other than checking the date part and giving different insert statements.

您不需要为每种情况使用不同的 SQL 语句,您只需要调整语句使其在传递空字符串时不会失败:

INSERT INTO tblname ( ... , col3) VALUES ( ... , NULLIF(?, '')::date)

关于java - PostgreSQL 无法将空字符串转换为(空)日期值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57744597/

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