你能帮助我吗:我尝试使用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");
}
}
答案 0 :(得分:1)
您尚未在SP签名中定义任何OUT
参数。除非是,否则在从客户端程序注册OUT
参数时会抛出错误。
更改您的SP签名如下:
CREATE DEFINER=`root`@`localhost`
PROCEDURE `count_product`(IN p_id INT, OUT out_param varchar)
但是,在您的过程中,您只是选择一组记录,但没有执行任何其他操作来查找和设置OUT
参数。因此,不需要这样的OUT
参数。而是在执行语句之后读取结果集并循环查找您想要的内容。