为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。 【DM版本】:V8 【操作系统】:linux 【CPU】: 【问题描述】*:通过java调用存储过程时,实例化CallableStatement对象时,prepareCall()执行报错,错误内容为dm.jdbc.driver.DMException:第1行,第5列[call]附近出现错误:语法分析出错。将sql提取后到DM数据库测试,能成功执行。
补充测试代码 如下图
能后提供下完整测试用例。或者对比下下面的代码
public static boolean query_data() { boolean result = true; Connection connection = getConnection(); String sql = "{call GET_EMPLOYEE_DATA(?)}"; try { CallableStatement statement = connection.prepareCall(sql); // 注册游标输出参数 statement.registerOutParameter(1,Types.REF_CURSOR); // 执行存储过程 statement.execute(); // 获取游标结果集 ResultSet resultSet = (ResultSet) statement.getObject(1); // 处理结果集 while (resultSet.next()) { // 从结果集中获取数据 int id = resultSet.getInt("id"); String name = resultSet.getString("name"); System.out.println("id: " + id + ", name: " + name); } // 关闭结果集和语句 resultSet.close(); statement.close(); } catch (SQLException e) { result = false; try { connection.rollback();//出错回滚 } catch (SQLException e1) { e1.printStackTrace(); } e.printStackTrace(); }finally { try { connection.close(); } catch (SQLException e) { e.printStackTrace(); } } return result; }
能后提供下完整测试用例。或者对比下下面的代码
public static boolean query_data() { boolean result = true; Connection connection = getConnection(); String sql = "{call GET_EMPLOYEE_DATA(?)}"; try { CallableStatement statement = connection.prepareCall(sql); // 注册游标输出参数 statement.registerOutParameter(1,Types.REF_CURSOR); // 执行存储过程 statement.execute(); // 获取游标结果集 ResultSet resultSet = (ResultSet) statement.getObject(1); // 处理结果集 while (resultSet.next()) { // 从结果集中获取数据 int id = resultSet.getInt("id"); String name = resultSet.getString("name"); System.out.println("id: " + id + ", name: " + name); } // 关闭结果集和语句 resultSet.close(); statement.close(); } catch (SQLException e) { result = false; try { connection.rollback();//出错回滚 } catch (SQLException e1) { e1.printStackTrace(); } e.printStackTrace(); }finally { try { connection.close(); } catch (SQLException e) { e.printStackTrace(); } } return result; }