java怎么调用MySQL存储过程?

图片说明Java调用存储过程报错,存储过程有两个int型参数,在数据库里存储过程可以运行,运行结果如上图:java.sql.SQLException: Parameter index out of range (0 < 1 ).
代码如下,不知道怎么改,求网友协助

public ArrayList getzhdltj(String Time,String Dzbm)
{
//定义一些变量
ResultSet rs=null;
Connection ct=null;
PreparedStatement csmt=null;
Statement ps=null;
ArrayList al = new ArrayList();
try
{
ct=(new ConnectDB()).ConnDB();
int Dzbmint=Integer.parseInt(Dzbm);
int Timeint=Integer.parseInt(Time);
//ct.setAutoCommit(false);
csmt=ct.prepareCall("{PRO_综合电力统计(IN_YEAR,IN_STATIONID)}");
csmt.setInt(0, Timeint);
csmt.setInt(1, Dzbmint);

            csmt.execute();
            ct.commit();
            rs=csmt.executeQuery();
            while(rs.next())
            {
                Wnbqgl nbqgl=new Wnbqgl();
                //nbqgl.setMaxdl(rs.getDouble(2));
                /*月计划发电量*/
                nbqgl.setYjfdl(rs.getDouble(1));
                nbqgl.setEjfdl(rs.getDouble(2));
                nbqgl.setSjfdl(rs.getDouble(3));
                nbqgl.setSijfdl(rs.getDouble(4));
                nbqgl.setWjfdl(rs.getDouble(5));
                nbqgl.setLjfdl(rs.getDouble(6));
                nbqgl.setQjfdl(rs.getDouble(7));
                nbqgl.setBjfdl(rs.getDouble(8));
                nbqgl.setJjfdl(rs.getDouble(9));
                nbqgl.setShijfdl(rs.getDouble(10));
                nbqgl.setSyjfdl(rs.getDouble(11));
                nbqgl.setSejfdl(rs.getDouble(12));

JAVA调用MYSQL存储过程
 
工程视图:
 

 
 
代码清单:
 
myconn.java
 
 package org.apache.sh_mysql.test;

import java.sql.*;

public class MyConn {

private static......<br/><strong>答案就在这里:</strong><a target='_blank' rel='nofollow' href='http://blog.csdn.net/cdh1213/article/details/5635292'>JAVA调用MYSQL存储过程</a><br/>----------------------你好,人类,我是来自CSDN星球的问答机器人小C,以上是依据我对问题的理解给出的答案,如果解决了你的问题,望采纳。

csmt.setInt(0, Timeint);
这个参数从1开始编号而不是0

参考代码
conn = JdbcUtils.getConnection();
CallableStatement cstmt = (CallableStatement) conn.prepareCall("{call updatePopularUserMore(?,?,?,?,?)}", iRsType, iRsConcurrency);
cstmt.setObject("aUserId", aUserId);
cstmt.setObject("aMood", aMood);
cstmt.setObject("aPersonalityLabel", aPersonalityLabel);
cstmt.setObject("aFriendClaim", aFriendClaim);
cstmt.setObject("aHeaderPic", aHeaderPic);

http://lcy0202.iteye.com/blog/1556132

看你报错的内容: java.sql.SQLException: Parameter index out of range (0 < 1 ).
参数索引值溢出
csmt.setInt(0, Timeint);索引从1开始

看jdk文档:
用于执行 SQL 存储过程的接口。JDBC API 提供了一个存储过程 SQL 转义语法,该语法允许对所有 RDBMS 使用标准方式调用存储过程。此转义语法有一个包含结果参数的形式和一个不包含结果参数的形式。如果使用结果参数,则必须将其注册为 OUT 型参数。其他参数可用于输入、输出或同时用于二者。参数是根据编号按顺序引用的,**第一个参数的编号是 1**。

改代码:
csmt.setInt(1, Timeint);
csmt.setInt(2, Dzbmint);