java.sql.SQLException: Ungültiger Spaltenindex

fenerli23

Erfahrenes Mitglied
Hi,

habe ein Programm geschrieben, in dem ich eine Select- Anweisung habe und in dieser ich ein Parameter setze. Nur habe ich jetzt ein problem da ich eine Fehlermeldung angezeigt bekomme, aber meiner Meinung nach müsste alles so stimmen..?

habe dies so realisiert: //ersetzt diese Zeichen "?" in der Select- Anweisung
Code:
pstmt.setString(1, parameter);

nun kriege ich aber diese Fehlermeldung:
Code:
java.sql.SQLException: Ungültiger Spaltenindex
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:208)
	at oracle.jdbc.driver.OraclePreparedStatement.setStringInternal(OraclePreparedStatement.java:5265)
	at oracle.jdbc.driver.OraclePreparedStatement.setString(OraclePreparedStatement.java:5257)
	at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.setString(DelegatingPreparedStatement.java:132)
	at meinpackage.Service.Webservice(Service.java:332)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:585)
	at org.apache.axis2.rpc.receivers.RPCUtil.invokeServiceClass(RPCUtil.java:194)
	at org.apache.axis2.rpc.receivers.RPCMessageReceiver.invokeBusinessLogic(RPCMessageReceiver.java:98)
	at org.apache.axis2.receivers.AbstractInOutMessageReceiver.invokeBusinessLogic(AbstractInOutMessageReceiver.java:40)
	at org.apache.axis2.receivers.AbstractMessageReceiver.receive(AbstractMessageReceiver.java:96)
	at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:145)
	at org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:275)
	at org.apache.axis2.transport.http.AxisServlet.doPost(AxisServlet.java:120)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Thread.java:595)
 
Java:
try {
			ApplicationContext appCtx = new ClassPathXmlApplicationContext(new String[] {"meinpackage/applicationContext.xml"});
			SqlStatements statm = (SqlStatements)appCtx.getBean(statement);
			statement = statm.getStatement();
			Context initContext = new InitialContext();
	    	Context envContext  = (Context)initContext.lookup("java:/comp/env");
	    	DataSource ds = (DataSource)envContext.lookup("jdbc/xe");
	    	
	    	System.out.println(statement);
	    	
	        if (ds != null) {
		      conn = ds.getConnection();
		      pstmt = conn.prepareStatement(statement);
			  pstmt.setString(1, parameter);
....

habe das System.out.println zum test hier damit ich nachschauen kann, ob das Statement entnommen werden kann von der xml Datei ... Und die Antowrt darauf lautet: Ja das richtige statement wird ausgegeben bzw. rausgelesen, aber beim setzen entsteht dieser Fehler denn ich oben dargestellt habe...

Danke
 
Zuletzt bearbeitet:
Abgesehen davon, dass der Code ziemlich grausam ist - was sagt dir denn die Wortgruppe "Ungültiger Spaltenindex"? Hmmm, da ist von einem Index die Rede. Wo benutzt du denn einen index? Ach ja, beim setzen der Statementparameter.

Scheinbar schießt also deine 1 ins Leere. Hat dein Query vielleicht nur einen Parameter? 1 setzt den 2. Parameter (soweit ich weiß beginnen die auch bei 0 zu zählen...).

Btw. darf ich fragen, was du da codest? Sieht mir nach ner recht schlimmen Selbstimplementierung von NamedQuerys aus. Warum dann nicht JPA http://docs.solarmetric.com/full/html/ejb3_overview_query.html#ejb3_overview_query_named ?

REINHAUN!
 
nee ich setzte hier 2 Parameter und meines Wissens nach ist die 1 für den ersten Parameter somit und für den zweiten Parameter der Index 2....
habe auch das ganze mit 0 für den ersten Parameter und 1 für den 2 Parameter versucht klappt auch nicht... ;(
 
Zuletzt bearbeitet:
wie sieht der query genau aus? du musst die Platzhalter mit "?1, ?2" versehen, soweit ich weiß oder halt benamte platzhalter ":foobar" verwenden.

Gruß
Ollie
 
Zuletzt bearbeitet:
mmh nee ich habe das nur so implementiert "?" für beide Parameter..., da ich das auch so kennengelernt habe.

mmh das mit dem Namen ist auch eine Überlegung wert, da muss ich das ganze aber mit Statement anstatt PreparedStatement realisieren ..?
 
Zurück