SQLServerException: The index 58 is out of attain - JDBC

I was executing a stored physical care for against SQL SERVER 2008 database from Java program using CallableStatement, but unfortunately, I was getting next fault "SQLServerException: The index 58 is out of range". Since I am passing a lot of parameters I idea that something is incorrect alongside a publish of parameters I was passing to the stored proc. My stored physical care for had 58 INPUT parameters, every bit presently every bit I removed the 58th INPUT parameter the fault goes away, which confirmed my belief that SQL SERVER supports a maximum of 57 INPUT parameters inwards stored physical care for via JDBC. This  seems the actually meaning limitation, specially for big tables in addition to I was thinking that It's to a greater extent than probable that 58 is non the actual boundary in addition to I powerfulness convey missed something.

My suspicion was correct fifty-fifty though the fault goes away every bit presently every bit I removed the 58th parameter, it was naught to do alongside SQL SERVER boundary on stored proc parameters but it was the publish of placeholders I had defined alone 57 placeholders but I was setting information for 58th parameter using setString() method in addition to that was causing this exception.  How do I acquire to know that? Luckily I in 1 trial again got the same fault but this time, it was complaining nearly 35 existence out-of-range i.e. com.microsoft.sqlserver.jdbc.SQLServerException: The index 35 is out of range. which confirmed my suspicion that I was missing something.


com.microsoft.sqlserver.jdbc.SQLServerException: The index 58 is out of range

You acquire the next fault piece executing stored physical care for against SQL SERVER 2008 or whatever other version from Java program:


Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: The index 58 is out of range.
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.setterGetParam(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.setString(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerCallableStatement.setString(Unknown Source)
at org.apache.commons.dbcp.DelegatingCallableStatement.setString(DelegatingCallableStatement.java:219)
at org.apache.commons.dbcp.DelegatingCallableStatement.setString(DelegatingCallableStatement.java:219)

or

Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: The index 35 is out of range.
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.setterGetParam(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.setString(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerCallableStatement.setString(Unknown Source)

Reason: 
As I said, the actual argue was  not the SQL SERVER boundary but it was the publish of placeholders. I had defined 34 placeholder but setting information for the 35th column using setString(), setInt() method in addition to that's why JDBC complaining that index 35 is out of range. Remember, the first column inwards JDBC starts alongside index 1 in addition to non zero.


Java Example
This fault tin too come upward when you lot are using PreparedStatement or CallableStatement in JDBC. Here is an SQL enquiry to call back majority details using ISBN publish past times calling a stored physical care for from Java Program using Callable Statement:

String SQL = "{call Books.dbo.usp_BookDetails_Get(?)}"; CallableStatement cs = con.prepareCall(SQL); cs.setString(1, "978-0132778046"); cs.setString(2, "978-0132778047"); ResultSet rs = cs.executeQuery();

This code volition throw:

com.microsoft.sqlserver.jdbc.SQLServerException: The index two is out of range.
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:190)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.setterGetParam(SQLServerPreparedStatement.java:714)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.setValue(SQLServerPreparedStatement.java:723)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.setString(SQLServerPreparedStatement.java:1048)

Why? because there is alone 1 enquiry parameter required past times the stored physical care for "?" in addition to index starts from 1 inwards JDBC rather than zero. Hence, index two is invalid because there is no instant placeholder inwards your SQL query.

This fault tin too come upward when you lot are executing PreparedStatement based SQL enquiry which contains house holders or bind parameters every bit shown below:

PreparedStatement ps = con.prepareStatement("SELECT * from Books WHERE ISBN=?"); ps.setString(1, "978-0132778047"); ps.setString(3, "1");  ResultSet rs = ps.executeQuery(); 

This code volition throw, the index iii is out of hit error, every bit you lot tin encounter it below:

com.microsoft.sqlserver.jdbc.SQLServerException: The index iii is out of range.
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:190)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.setterGetParam(SQLServerPreparedStatement.java:714)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.setValue(SQLServerPreparedStatement.java:723)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.setString(SQLServerPreparedStatement.java:1048)

Similarly, if you lot encounter SQLServerException: The index 1 is out of range, it agency in that location is no placeholder inwards PreparedStatement of CallableStatement but you lot are however setting values past times calling diverse setXXX() methods.


That's all nearly the actual campaign of "com.microsoft.sqlserver.jdbc.SQLServerException: The index 35 is out of range" fault in addition to how to ready it. The actual argue was that publish of placeholder was 34 but you lot are calling setXXX() method 35 times i.e. to a greater extent than than in addition to thus publish of defined placeholders. Once you lot take away the extra setXXX() telephone outcry upward or increased the publish of placeholders, the fault was fixed.

If you lot are novel inwards JDBC in addition to thus you lot tin too refer JDBC Recipes: Influenza A virus subtype H5N1 Problem-Solution Approach majority to larn to a greater extent than nearly how to connect database from Java application:

 I was executing a stored physical care for against SQL SERVER  SQLServerException: The index 58 is out of hit - JDBC


Related JDBC tutorials in addition to troubleshooting guides
  • Difference betwixt type 1 in addition to type iv JDBC drivers inwards Java (answer)
  • Top 10 JDBC Interview Questions for Java programmers (list)
  • How to solve java.lang.classnotfoundexception oracle.jdbc.driver.oracledriver? (solution)
  • Cause in addition to solution of java.lang.ClassNotFoundException: com.mysql.jdbc.Driver (solution)
  • How to connect MySQL database from Java program? (guide)
  • How to convert java.util.Date to java.sql.Date inwards JDBC Java? (solution)
  • Top 10 JDBC Best Practices for Java develoeprs (list)
  • java.sql.SQLException: No suitable driver constitute for jdbc:jtds:sqlserver (solution)
  • java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver (solution)


Further Reading
If you lot are novel inwards JDBC in addition to looking for simply about practiced books to larn JDBC, in addition to thus you lot tin refer these books:
  • Practical Database Programming alongside Java By Ying Bai (see here)
  • JDBC Recipes: Influenza A virus subtype H5N1 Problem-Solution Approach (see here)

Subscribe to receive free email updates:

0 Response to "SQLServerException: The index 58 is out of attain - JDBC"

Posting Komentar