Spring Jdbctemplate gibt InvalidResultSetAccessException Ungültiger Spaltenindex an
-
26-10-2019 - |
Frage
Ich benutze Spring's SimpleJDBCTemplate
Sozug auf Oracle DB. Hier ist mein Code.
String sql = "SELECT from_bin_code FROM hbin_import_mapping";
return jt.query(sql, new BeanHbinImportMappingMapper(), (Object) null);
Der Zeilen -Mapper ist:
public class BeanHbinImportMappingMapper
implements
RowMapper<BeanHbinImportMapping> {
public BeanHbinImportMapping mapRow(ResultSet rs, int rowno)
throws SQLException {
int fromBinCode = rs.getInt("from_bin_code");
// char fromBinCodeChar = rs.getString("from_bin_code_char").charAt(0);
// boolean fromBinCodeAllowed = rs.getString("from_bin_code_allowed")
// .equals("Y") ? true : false;
// int oliBinCode = rs.getInt("oli_bin_code");
// String oliBinQuality = rs.getString("oli_bin_quality");
// String oliBinGroup = rs.getString("oli_bin_group");
// String oliBinDesc = rs.getString("oli_bin_desc");
// boolean olibinRef = rs.getString("oli_bin_ref").equals("Y") ? true
// : false;
BeanHbinImportMapping bean = new BeanHbinImportMapping(fromBinCode);
// BeanHbinImportMapping bean = new BeanHbinImportMapping(1, 'c', true);
return bean;
}
}
Der SQL wird geprüft.
Ausnahmestapelspur:
javax.servlet.ServletException: org.springframework.jdbc.InvalidResultSetAccessException: PreparedStatementCallback; invalid ResultSet access for SQL [SELECT from_bin_code FROM hbin_import_mapping]; nested exception is java.sql.SQLException: Invalid column index
org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:545)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:486)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
root cause
org.springframework.jdbc.InvalidResultSetAccessException: PreparedStatementCallback; invalid ResultSet access for SQL [SELECT from_bin_code FROM hbin_import_mapping]; nested exception is java.sql.SQLException: Invalid column index
org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:237)
org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72)
org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:602)
org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:636)
org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:665)
org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:673)
org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:713)
org.springframework.jdbc.core.simple.SimpleJdbcTemplate.query(SimpleJdbcTemplate.java:200)
com.st.mas.wmr.persistence.atom.AtomStifOliBinConversion.getLoaderMatrix(AtomStifOliBinConversion.java:52)
com.st.mas.wmr.persistence.process.ProcessStifOliBinConversion.getLoaderMatrix(ProcessStifOliBinConversion.java:50)
com.st.mas.wmr.action.StifBinConversionAction.viewLoaderMapping(StifBinConversionAction.java:35)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:585)
org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:280)
com.st.mas.wmr.action.AnyDispatchAction.execute(AnyDispatchAction.java:107)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
root cause
java.sql.SQLException: Invalid column index
oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:124)
oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:161)
oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:226)
oracle.jdbc.driver.OraclePreparedStatement.setNullInternal(OraclePreparedStatement.java:3661)
oracle.jdbc.driver.OraclePreparedStatement.setNull(OraclePreparedStatement.java:3652)
org.apache.commons.dbcp.DelegatingPreparedStatement.setNull(DelegatingPreparedStatement.java:108)
org.apache.commons.dbcp.DelegatingPreparedStatement.setNull(DelegatingPreparedStatement.java:108)
org.springframework.jdbc.core.StatementCreatorUtils.setNull(StatementCreatorUtils.java:252)
org.springframework.jdbc.core.StatementCreatorUtils.setParameterValueInternal(StatementCreatorUtils.java:213)
org.springframework.jdbc.core.StatementCreatorUtils.setParameterValue(StatementCreatorUtils.java:144)
org.springframework.jdbc.core.ArgPreparedStatementSetter.doSetValue(ArgPreparedStatementSetter.java:65)
org.springframework.jdbc.core.ArgPreparedStatementSetter.setValues(ArgPreparedStatementSetter.java:46)
org.springframework.jdbc.core.JdbcTemplate$1.doInPreparedStatement(JdbcTemplate.java:641)
org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:586)
org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:636)
org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:665)
org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:673)
org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:713)
org.springframework.jdbc.core.simple.SimpleJdbcTemplate.query(SimpleJdbcTemplate.java:200)
com.st.mas.wmr.persistence.atom.AtomStifOliBinConversion.getLoaderMatrix(AtomStifOliBinConversion.java:52)
com.st.mas.wmr.persistence.process.ProcessStifOliBinConversion.getLoaderMatrix(ProcessStifOliBinConversion.java:50)
com.st.mas.wmr.action.StifBinConversionAction.viewLoaderMapping(StifBinConversionAction.java:35)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:585)
org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:280)
com.st.mas.wmr.action.AnyDispatchAction.execute(AnyDispatchAction.java:107)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
Vielen Dank.
Lösung
Sie übergeben Parameter (in diesem Fall NULL) und die Abfrage hat keine Abfrageparameter ... entweder einem Parameter zur Abfrage hinzufügen oder den Parameter aus dem Methodenaufruf entfernen.
http://forum.springource.org/showthread.php?t=108788
Danke Martin Deinum
Andere Tipps
** RowMapper **
- Der Vorteil der Verwendung dieser Schnittstelle besteht darin, jede Zeile auf ein Ergebnisobjekt zuzuordnen. Maprow () Diese Methode sollte nicht als Next () im Ergebnisabruf aufrufen. Es soll nur Werte der aktuellen Zeile abbilden. und Rückgabeliste von Objekten.*
applicationConttext.xml
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/yash" />
<property name="username" value="root" />
<property name="password" value="" />
</bean>
<bean id="jt" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="empdao" class="gmail.daos.EmpDao">
<property name="jt" ref="jt"/>
</bean>
Dao -Klasse *
public class EmpDao { private JdbcTemplate jt; public List<EmpDto> listEmpoyees(){ String sql = "select * FROM emp"; List<EmpDto> emplist = jt.query(sql, new RowMapper() { public EmpDto mapRow(ResultSet rs, int rowNum) throws SQLException { EmpDto emp = new EmpDto(); emp.setId(rs.getInt("id")); emp.setName(rs.getString("name")); emp.setAge(rs.getInt("age")); emp.setSalary(rs.getInt("salary")); emp.setAddress(rs.getString("address")); System.out.println("***"); return emp; } }); return emplist; }}
Wenn Sie auf diese Weise verwenden, ist dies keine Wiederversuchexecption.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow