【发布时间】:2015-09-14 09:06:50
【问题描述】:
我正在尝试将多边形插入到托管在 z/OS 上的 db2 表中 这是我的数据库项目编写器
<bean id="databaseItemWriter"
class="org.springframework.batch.item.database.JdbcBatchItemWriter">
<property name="dataSource" ref="dataSource" />
<property name="sql">
<value>
<![CDATA[
INSERT INTO SAMPLE_GEOMETRIES
(GEO_NAME, GEOMETRY)
VALUES
( ?, DB2GSE.ST_POLYGON(?, 1))
]]>
</value>
</property>
<property name="itemPreparedStatementSetter">
<bean class="com.amex.elbs.DAO.GeometriesItemPreparedStatementSetter" />
</property>
</bean>
这是我自定义的预处理语句设置器
公共类 GeometriesItemPreparedStatementSetter 实现 ItemPreparedStatementSetter{
@Override
public void setValues(Geometries item, PreparedStatement ps) throws SQLException {
ps.setString(1, item.Id);
ps.setString(2, item.Polygon);
}
}
这是我的示例输入文件。它是用管道分隔的,并且有 ID 和多边形坐标。
pm251|'POLYGON((-159.335174733889 21.9483433404175,-159.327130348878 22.0446395507162,-159.295025589769 22.1248124949548,-159.343195828355 22.1970166285359,-159.391366885913 22.2291198667724,-159.576012589057 22.2131796383001,-159.712505933171 22.1490592515515,-159.800814224332 22.0366665967853,-159.736592652746 21.9644203111023,-159.640246973766 21.9483657695954,-159.576021285803 21.8841361312636,-159.439545188912 21.8680716835921,-159.335174733889 21.9483433404175))', 1
以下语句在z/OS上执行成功。
,INSERT,INTO SAMPLE_GEOMETRIES
(GEO_NAME, GEOMETRY)
VALUES
( 'PM',
DB2GSE.ST_POLYGON('POLYGON((
-159.335174733889 21.9483433404175,
-159.327130348878 22.0446395507162,
-159.295025589769 22.1248124949548,
-159.343195828355 22.1970166285359,
-159.391366885913 22.2291198667724,
-159.576012589057 22.2131796383001,
-159.712505933171 22.1490592515515,
-159.800814224332 22.0366665967853,
-159.736592652746 21.9644203111023,
-159.640246973766 21.9483657695954,
-159.576021285803 21.8841361312636,
-159.439545188912 21.8680716835921,
-159.335174733889 21.9483433404175))',1))
---------+---------+---------+---------+---------
DSNE615I NUMBER OF ROWS AFFECTED IS 1
这是我执行时得到的
Caused by: com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-245, SQLSTATE=428F5, SQLERRMC=DB2GSE.ST_POLYGON, DRIVER=4.12.55
at com.ibm.db2.jcc.am.hd.a(hd.java:676)
at com.ibm.db2.jcc.am.hd.a(hd.java:60)
at com.ibm.db2.jcc.am.hd.a(hd.java:127)
at com.ibm.db2.jcc.am.mn.c(mn.java:2621)
at com.ibm.db2.jcc.am.mn.d(mn.java:2609)
at com.ibm.db2.jcc.am.mn.a(mn.java:2085)
at com.ibm.db2.jcc.am.nn.a(nn.java:7054)
at com.ibm.db2.jcc.am.mn.a(mn.java:2062)
at com.ibm.db2.jcc.t4.cb.g(cb.java:136)
at com.ibm.db2.jcc.t4.cb.a(cb.java:41)
at com.ibm.db2.jcc.t4.q.a(q.java:32)
at com.ibm.db2.jcc.t4.rb.i(rb.java:135)
at com.ibm.db2.jcc.am.mn.ib(mn.java:2055)
at com.ibm.db2.jcc.am.nn.rc(nn.java:3219)
at com.ibm.db2.jcc.am.nn.s(nn.java:3370)
at com.ibm.db2.jcc.am.nn.l(nn.java:2499)
at com.ibm.db2.jcc.am.nn.addBatch(nn.java:2438)
at org.springframework.batch.item.database.JdbcBatchItemWriter$1.doInPreparedStatement(JdbcBatchItemWriter.java:190)
at org.springframework.batch.item.database.JdbcBatchItemWriter$1.doInPreparedStatement(JdbcBatchItemWriter.java:185)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:644)
... 28 more
【问题讨论】:
-
您是说您成功地使用 SPUFI(或其他东西,如果是这样呢?)来测试 SQL?然后它试图从程序中执行它失败了?你检查了消息/代码www-304.ibm.com/support/knowledgecenter/SSEPEK_10.0.0/…,你能做些什么吗?
-
我会尝试删除 '' 引号;
ps.setString()应该自动完成
标签: spring db2 spring-batch spatial