java - MySQL Java 存储过程给出错误 "Parameter index of 1 is out of range"

标签 java mysql

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;
      }
    }

当我运行这段代码时,我在线程“main”java.sql.SQLException 中看到一个异常:Parameter index of 1 is out of range (1, 0),为什么?

这个程序返回:

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

我的程序;

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

最佳答案

您需要在调用字符串中指定参数:

CallableStatement proc = connection.prepareCall("{ call LCD_GetDispInfoAllTimeTable(?) }");

注意 ?,它表示有一个参数需要设置。现在它知道有一个参数要设置,就像 Java 或其他语言中的方法一样。如果您想使用多个参数,您可以编写多个 ?,例如:...LCD_GetDispInfoAllTimeTable(?, ?, ?)

关于java - MySQL Java 存储过程给出错误 "Parameter index of 1 is out of range",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39871505/

相关文章:

java - 将字符串字段转换为分隔文件 (.csv)

java - 如何从不同的Consul上下文中获取多个Consul KV?

java - 用户输入导致表单出现

java - ShutdownGraceively() 永远不会返回

php - 来自 mysql_connect() 的警告未填充 mysql_error()

php - 在 PHP 执行时显示加载图像

java - 为什么我会收到错误 "package org.mockito.runners does not exist"?

mysql - 使用 MYSQL Workbench 查询将数据 (DATETIME) 加载到 MySQL 中时出现错误 1265

php - 我想使用这个 for 循环清除数据库中的特定行值

php - 如何在php/mysql中实现类似SO的标签系统?