Ich versuche, Aufzeichnungen zu Postgres-Tabelle einzufügen Prepared Statements, aber ich bin immer Fehler folgende während Insert-Anweisungen:Spring Batch insert/update auf Postgres vorbereitete Anweisung mit
[main] ERROR org.springframework.batch.core.step.AbstractStep - Encountered an error executing step someStep in job someJob
org.springframework.dao.EmptyResultDataAccessException: Item 0 of 1 did not update any rows: [[[email protected],[email protected]]
at org.springframework.batch.item.database.JdbcBatchItemWriter.write(JdbcBatchItemWriter.java:202)
Mein Schreiber ist:
package com.somepackage.writer;
public class trialClass implements ItemPreparedStatementSetter<List<someORM>> {
@Override
public void setValues(List<someORM> itemList,java.sql.PreparedStatement ps) throws SQLException,EmptyResultDataAccessException {
try {
for (ORM item : itemList) {
for (int i = 0;i<itemList.size();i++)
{
ps.setInt(1, itemList.get(i).getPropOne());
ps.setString(2, itemList.get(i).getPropTwo());
ps.setInt(3, itemList.get(i).getPropThree());
ps.setInt(4, itemList.get(i).getPropFour());
ps.addBatch();
}
int[] rs = ps.executeBatch();
} catch (Exception e) {
e.printStackTrace();
}}}
Meine xML-Datei ist so etwas wie dieses:
<beans:bean id="beanId" scope="step"
class="org.springframework.batch.item.support.CompositeItemWriter">
<beans:property name = "delegates">
<util:list>
<beans:ref bean= "someId"/>
<beans:ref bean= "someOtherId"/>
</util:list>
</beans:property>
</beans:bean>
<beans:bean id = "someId" scope = "step"
class="org.springframework.batch.item.database.JdbcBatchItemWriter">
<beans:property name="dataSource" ref="someSource" />
<beans:property name="sql" value = "${fetch.somequery.sql}" >
</beans:property>
<beans:property name="itemPreparedStatementSetter" ref="someRef" />
</beans:bean>
ich erhalte Fehler nur während des Einfügens der Datensätze funktionieren die Aktualisierungen einwandfrei (Postgres-Tabelle hat Primärschlüssel in der ersten Spalte) (In beiden Fällen werden die Datensätze in die postgres-Tabelle eingefügt/aktualisiert, aber bei der Einfügung wird dieser Fehler immer noch angezeigt)
und ich bin mit Abfrage wie:
fetch.somequery.sql =INSERT INTO table1 (col1, col2, col3) SELECT ?,?,? WHERE NOT EXISTS (SELECT 1 FROM table1 WHERE col1= ?);
aber wenn ich Ebene einfügen Abfrage verwende ich bin immer Fehler wie:
Caused by: org.postgresql.util.PSQLException: ERROR: duplicate key violates unique constraint "table1_pkey" (seg576 sdw24:40000 pid=398877)
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2062)
ich habe dafür gesorgt, dass die Datensätze nicht sind duplizieren, sondern st krank bekommen diesen Fehler
Wo mache ich es falsch? Kann ich ORM verwenden, um Daten zu Postgres zu aktualisieren. Wenn ja, wie? Kann ich die jdbc-Vorlage verwenden, um Daten zu Postgres zu aktualisieren? Wenn ja, wie?
Wie behandelt man diese Ausnahme?
Wie kann ich die überspringbare Ausnahmeklasse in Schritt –