MySQL Java存储过程给出错误“;参数索引1超出范围“;
运行此代码时,我在线程“main”java.sql.SQLException中看到异常:1的参数索引超出范围(1,0),为什么 此程序返回:MySQL Java存储过程给出错误“;参数索引1超出范围“;,java,mysql,Java,Mysql,运行此代码时,我在线程“main”java.sql.SQLException中看到异常:1的参数索引超出范围(1,0),为什么 此程序返回: public static void main(String[] args) throws Exception { Connection connection = getMySqlConnection(); CallableStatement proc = connection.prepareCall("{ call LCD
public static void main(String[] args) throws Exception {
Connection connection = getMySqlConnection();
CallableStatement proc = connection.prepareCall("{ call LCD_GetDispInfoAllTimeTable() }");
proc.registerOutParameter(1, Types.INTEGER);
proc.execute();
int returnValue = proc.getInt(1);
System.out.println(returnValue + "");
// conn.close();
}
public static Connection getMySqlConnection() throws Exception {
String driver = "com.mysql.jdbc.Driver";
String url = "";
String username = "";
String password = "";
Class.forName(driver);
Connection conn = DriverManager.getConnection(url, username, password);
return conn;
}
}
我的程序
Niemstów 07 pętla 10 05:33:00 3673114 11558169 754378 1
NŻ Niemstów 05 16 05:35:00 3669905 11556510 754379 3
NŻ Niemstów 03 16 05:37:00 3666969 11555665 754380 3
您需要在调用字符串中指定参数:
CallableStatement proc=connection.prepareCall(“{call LCD_getdispinfoalltimeline(?)”代码>
请注意,?
,它表示要设置一个参数。现在它知道有一个参数需要设置,就像Java或其他语言中的方法一样。如果要使用多个参数,可以编写多个?
,例如:…LCD\u GetDispInfoAllTimeline(?,?)
,就过程安全声明而言,其代码是:
CREATE DEFINER=`root`@`%` PROCEDURE `LCD_GetDispInfoAllTimeTable`()
BEGIN
SELECT bs.name as bsName, tt.busstoptype as bsType, tt.time as ttTime, bs.longitude as lon, bs.latitude as lat, tt.timetable_id as ttID,
Bus_Stop_Status_GET( tt.timetable_id, bst.timetable_id, bst.busstate_id ) as bus_stop_status -- 0 zrobiony, 1 - aktualny, 2- pomiędzy, 3 następne
FROM (SELECT * FROM mpk_currentbusstate ORDER BY changestime desc LIMIT 1 )bst
join mpk_timetable t ON( bst.timetable_id = t.timetable_id )
join mpk_timetable tt ON ( t.linelogin_id = tt.linelogin_id AND t.line_id = tt.line_id AND t.brigade = tt.brigade AND t.rate = tt.rate
and t.schedudle_id = tt.schedudle_id)
LEFT JOIN mpk_busstop bs ON (bs.busstop_id = tt.busstop_id)
LEFT JOIN mpk_busstate bt ON( bst.busstate_id = bt.busstate_id );
END
如果过程定义不包含任何参数定义,
因此setParameter或registerOutParameter不能应用于此过程如果我的过程没有参数,为什么我必须在调用中指定参数?当我在mysql中启动他的过程时,我没有设置参数,因为它有参数,输出参数也是参数。那么,你能告诉我如何获取所有行吗?当我执行这个CallableStatement proc=connection.prepareCall({call mpklocal.LCD_getdispinfoalltimeline(?);proc.registerOutParameter(1,Types.VARCHAR);我看到了同样的警报,您的存储过程是否在SQL端有输出参数?
CREATE DEFINER=`root`@`%` PROCEDURE `LCD_GetDispInfoAllTimeTable`()
BEGIN
SELECT bs.name as bsName, tt.busstoptype as bsType, tt.time as ttTime,
bs.longitude as lon, bs.latitude as lat, tt.timetable_id as ttID,
Bus_Stop