我正在尝试使用 java 创建一个 SQL 语句。问题是我正在使用
stmt.setString(9, ev.getState().status());
对于我试图插入状态类型的 SQL 列的变量
CREATE TYPE STATUS AS ENUM ('APPROVED', 'CLOSED','STARTED', 'WAITING');
它抛给我一个例外
column "state" is of type status but expression is of type character varying
Hint: You will need to rewrite or cast the expression.
我是犯了错误还是我真的需要在 sql 中转换值?如果是,在这种情况下如何施法?
完整声明:
PreparedStatement stmt = conn.prepareStatement("INSERT INTO Event (EventNum, EventName, startHour, endHour, startMin, endMin, startDate, endDate, State, depName) VALUES (?, ?, ?, ?, ?, ?, ?::date, ?::date, ?, ?)");
stmt.setInt(1, ev.getEventNum());
stmt.setString(2, ev.getName());
stmt.setInt(3, ev.getStartHour());
stmt.setInt(4, ev.getEndHour());
stmt.setInt(5, ev.getStartMinute());
stmt.setInt(6, ev.getEndMinute());
stmt.setString(7, ev.getStartYear() + "-" + ev.getStartMonth() + "-" + ev.getStartDate());
stmt.setString(8, ev.getEndYear() + "-" + ev.getEndMonth() + "-" + ev.getEndDate());
stmt.setString(9, ev.getState().status());
stmt.setString(10, ev.getDepartment());
stmt.executeUpdate();
原文由 Gatiivs 发布,翻译遵循 CC BY-SA 4.0 许可协议
您正在使用准备好的语句 - PostgreSQL 从客户端获取信息,因此参数是
varchar
因为您正在使用setString
方法。您应该通知 Postgres,因此输入数据类型与显式转换不同。所有数据都以文本形式传递(这是默认的)——所以传递值没有问题。 PostgreSQL uses strict type system - and without explicit casting don’t allow cast from
varchar
todate
,enum
,int
, .. .