用mysql编写Java存储过程

时间:2014-10-03 07:21:26

标签: java mysql

你能帮助我吗:我尝试使用jdbc执行存储过程但是我一直收到错误:

  

java.sql.SQLException:参数索引2超出范围(1,1)

步骤:

DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `count_product`(IN p_id INT)

BEGIN
select firstname  FROM product WHERE id=p_id;
END $$

代码:

public class StoredProcedure {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Connection con=null;

        java.sql.CallableStatement stmt = null;
        Scanner input = new Scanner(System.in);
        System.out.println("Enter the Id(int):");
        int id = Integer.parseInt(input.nextLine());

        try {
            con=DriverManager.getConnection("jdbc:mysql://localhost:3306/personsdb","root","");

            System.out.println("Connected");
            stmt = con.prepareCall("{call count_product(?,?)}");

            System.out.println("called");
            stmt.setInt(1, id);
            stmt.registerOutParameter(2,java.sql.Types.VARCHAR);

            stmt.execute();

            String firstname = stmt.getString(2);

            if(firstname != null) {
                System.out.println("First Name=" + firstname);
            }
            else {
                System.out.println("Result Not Found");
            }
        }

1 个答案:

答案 0 :(得分:1)

您尚未在SP签名中定义任何OUT参数。除非是,否则在从客户端程序注册OUT参数时会抛出错误。

更改您的SP签名如下:

CREATE DEFINER=`root`@`localhost` 
       PROCEDURE `count_product`(IN p_id INT, OUT out_param varchar)

但是,在您的过程中,您只是选择一组记录,但没有执行任何其他操作来查找和设置OUT参数。因此,不需要这样的OUT参数。而是在执行语句之后读取结果集并循环查找您想要的内容。