当前位置: 首页 > 知识库问答 >
问题:

JDBC存储过程调用

柴修筠
2023-03-14

我创建了一个存储过程,如下所示:

//mysql中的存储过程

DELIMITER $$
CREATE PROCEDURE `bank`.`hello` (in id varchar(20),in pass varchar(20))
BEGIN
 insert into admin(username,password) values (id,pass);
END $$
DELIMITER ;

并且我正在调用Java中的存储过程,如下所示:

//使用JDBC调用存储过程

package StoredProcEx;
import java.sql.*;
public class StoredProcEx {
    public static void main(String arg[]){
    try{

    Class.forName("com.mysql.jdbc.Driver");
    Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/bank","root","root");
    //PreparedStatement stmt=con.prepareStatement("insert into admin values(?,?)");
    CallableStatement stmt=con.prepareCall("{?=call hello(?,?)}");
    stmt.setString(1,"birender");
    stmt.setString(2,"admin");
    stmt.execute();
    //stmt.execute();
    }
    catch(ClassNotFoundException ce){
    ce.printStackTrace();
    }
    catch(SQLException se){
     se.printStackTrace();
    }
    catch(Exception e){}
    }
}

但它显示了一个编译时异常,如下所示:

CAN在参数中为存储的函数调用的返回值设置。

共有1个答案

终逸仙
2023-03-14

请使用

CallableStatement stmt=con.prepareCall("{call hello(?,?)}");

而不是

CallableStatement stmt=con.prepareCall("{?=call hello(?,?)}");

先?在代码中用于返回类型

 类似资料:
  • 主要内容:创建CallableStatement对象,关闭CallableStatement对象,JDBC SQL转义语法在讨论JDBC Statement教程文章时,我们已经学习了如何在JDBC中使用存储过程。 本教程文章与该部分类似,但它将讲解演示有关JDBC SQL转义语法的其他信息。 就像对象创建和对象一样,它可使用同样的方式创建对象,该对象将用于执行对数据库存储过程的调用。 创建CallableStatement对象 假设需要执行以下Oracle存储过程 - 注意:上面的存储过程是为O

  • 我有一个非常复杂的oracle存储过程,它搜索和检索一些数据。该过程返回一个输出参数-oracle游标。我通过JDBC执行过程: 问题是,查询有时会花费相当长的时间(几分钟),我希望用户能够通过单击按钮随时取消查询。我引用了stmt对象,但不幸的是(从其他线程)调用stmt.cancel()没有效果。 另一方面,当我将CallableStatement sql更改为以下查询时: 在调用stmt.c

  • 问题内容: 我试图在postgres 9.3上使用sql调用函数内的函数。 这个问题与我的另一篇文章有关。 我写了下面的函数。到目前为止,我还没有合并任何类型的save-output(COPY)语句,因此我试图通过创建嵌套函数print-out函数来解决此问题。 以上功能有效。 尝试创建嵌套函数。 调用嵌套函数。 输出 上面给出了这个。但是,当在print_out()中将arg1,arg2替换为’

  • 我是使用JDBC和MariaDB创建存储过程的初学者。当我创建过程时,我得到一个错误。我从昨天开始就遇到了这个问题: 到目前为止,我尝试了以下代码。我不知道是什么原因造成了这个错误。

  • 我使用JDBC这样调用这个过程: 它向我抛出一个错误,通知调用格式错误。 但是如果我像这样直接在IDE中运行调用:

  • 从1.r.58开始, 支持出参, 之前的版本仅支持入参. 从实现方式上说, 是通过扩展自定义SQL的含义及上下文来实现 仅含义入参的存储过程 // 建表,删除老的存储过程. dao.create(Pet.class, true); dao.insert(Pet.create("wendal")); dao.execute(Sqls.create("DROP PRO