2014-12-21 18 views
6

Non sono esperto di applicazioni Web, di recente sto scrivendo una piccola applicazione web per la mia app mobile utilizzando servlet. Il mio ordine del giorno è quello di ricevere dati dal client e di inserirlo in db. tutto sta funzionando bene, tranne, la mia dichiarazione di inserimento del database, che sto cercando di ottenere utilizzando PreparedStatement.Istruzione preparata Indice dei parametri fuori intervallo (0 <1)

// This is how my insert statement looks like 
private String INSERT_INTO_DEVICES = "INSERT INTO travlemate.devices (owner," 
     + "deviceid,gcmid) VALUES (?,?,?)"; 

// This is how am trying to insert 
PreparedStatement preparedStmt = mConn.prepareStatement(INSERT_INTO_DEVICES); 
preparedStmt.setString(0, data.getDeviceNumber()); 
preparedStmt.setString(1, data.getDeviceID()); 
preparedStmt.setString(2,data.getGcmId()); 
preparedStmt.execute(); 
mConn.close(); 

ma durante l'esecuzione di questa operazione, sto ricevendo seguente eccezione

java.sql.SQLException: Parameter index out of range (0 < 1). 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:910) 
    at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:2791) 
    at com.mysql.jdbc.PreparedStatement.setString(PreparedStatement.java:3627) 
    at com.mkgcorp.travelweb.data.DataManager.registerGCMData(DataManager.java:35) 
    at com.mkgcorp.travelweb.controller.Loader.doPost(Loader.java:46) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:644) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:725) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:537) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1085) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:658) 
    at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1556) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1513) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Unknown Source) 

ho seriamente provato ogni sorta di cosa che sono capace di, ma questa eccezione non sta andando via, qualche idea sulla stessa?

Grazie, indici parametri Techfist

+0

È una di quelle fastidiose piccole differenze, ma gli indici di istruzione preparati iniziano da 1 non 0 – MadProgrammer

risposta

25

PreparedStatement partono 1

preparedStmt.setString(1, data.getDeviceNumber()); 
... 
+0

così stupidi da parte mia, perché non riescono a seguire lo stesso zero indicizzazione basata è davvero difficile da ricordare dove l'indicizzazione da seguire. – Techfist

+0

chiunque l'abbia progettato probabilmente ha pensato di utilizzare l'indicizzazione del linguaggio naturale era una buona idea, cioè '1st',' 2nd';) – Reimeus

4
PreparedStatement preparedStmt = mConn.prepareStatement(INSERT_INTO_DEVICES); 
preparedStmt.setString(1, data.getDeviceNumber()); 
preparedStmt.setString(2, data.getDeviceID()); 
preparedStmt.setString(3,data.getGcmId()); 
preparedStmt.execute(); 
mConn.close(); 

parametri JDBC sono non-indicizzati zero. Inizia con 1, in quanto tutti gli indici nelle dichiarazioni correlate al database iniziano con 1.

Problemi correlati