我将使用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
或""
。
最重要的是,我想知道是否还有其他事情,除了检查日期部分并给出不同的插入语句。
ERROR消息看起来像这样。
org.postgresql.util.PSQLException: ERROR: invalid input syntax for type date: ""
我再次检查发现,如果我将值更改为
""
NULL,则错误不会出现在其中。
//pstmt.setString(pstmtSetInt++, vo.getColName3());
String dateValue=vo.getColName3();
if (dateValue.equals("")) {
dateValue = null;
}
pstmt.setString(pstmtSetInt++, dateValue);
谢谢您的帮助。
答案 0 :(得分:0)
除了检查日期部分并给出不同的插入语句外,我想知道是否还有其他内容。
您无需为每种情况使用不同的SQL语句,只需调整该语句,以免在传递空字符串时该语句不会失败:
INSERT INTO tblname ( ... , col3) VALUES ( ... , NULLIF(?, '')::date)