【问题标题】:Java - execute stored procedureJava - 执行存储过程
【发布时间】:2019-02-06 20:32:41
【问题描述】:

我需要使用 java 从 sql 执行过程。

我已经在 exec MyProcedure 之类的 sql 管理中调用了我的过程并且运行良好。 但是当我在 java 代码中使用它时,我得到了错误:

语句没有返回结果集。

这是我的代码:

    ResultSet rs = null;
    PreparedStatement cs = null;
    Connection conn = DbM.dbConnect();

    try {
        cs = conn.prepareStatement("exec MyProcedure ?,?,?");
        cs.setEscapeProcessing(true);
        cs.setQueryTimeout(90);

        cs.setString(1, "1");
        cs.setString(2, "2019-01-01");
        cs.setString(3, "2019-02-02");

        rs = cs.executeQuery();
        ArrayList<Data> listaObjectX = new ArrayList<Data>();
        while (rs.next()) {
            Data to = new Data();
            to.setEmployeNo(rs.getString(1));
            to.setValidFrom(rs.getDate(2));
            to.setValidTo(rs.getDate(3));
            listaObjectX.add(to);
        } 
    } catch (SQLException se) {
        System.out.println("Error al ejecutar SQL"+ se.getMessage());
        se.printStackTrace();
        throw new IllegalArgumentException("Error al ejecutar SQL: " + se.getMessage());

    } finally {
        try {
            rs.close();
            cs.close();
            conn.close();;

        } catch (SQLException ex) {
            ex.printStackTrace();
        }
    }

运行代码时出现错误:

语句没有返回结果集。

知道如何解决这个问题吗?

如果我把 cs= conn.prepareStatement("exec MyProcedure (?,?,?)"); 我得到错误

“@P0”附近的语法不正确

【问题讨论】:

  • 参数周围不应该有括号吗?你用的是什么数据库?
  • 我使用 SQL 数据库。
  • @stack SQL 是一种语言,而不是数据库引擎。也许您指的是 Microsoft 的 SQL Server?
  • rs.next()循环中添加一个println,看看它是否执行..

标签: java sql sql-server procedure


【解决方案1】:

如果这个过程没有返回结果,你应该使用execute()而不是executeQuery(),它应该总是返回一个ResultSet。

【讨论】:

  • 这不起作用,显示错误:将“rs”类型更改为布尔值
  • 是的,这样做。或者只是不分配执行方法的结果,因为它没有返回任何东西。但是,如果您希望获得 ResultSet,请检查您的过程是否返回任何内容。
  • 我检查了我的程序,返回结果,但是当使用 java 时出现错误
猜你喜欢
  • 1970-01-01
  • 2012-10-24
  • 2016-02-08
  • 2010-09-15
  • 1970-01-01
  • 2010-11-02
  • 1970-01-01
  • 2012-07-02
  • 2013-09-20
相关资源
最近更新 更多