在谷歌应用程序脚本中执行存储过程

时间:2016-12-01 19:51:21

标签: mysql jdbc google-apps-script

我在google apps脚本中使用以下代码将Google Sheet中的员工记录插入到mysql数据库中。 存储过程[dbo]。[insertemployee]接受“@empname”参数。

  var empname = 'test';
  var mysqldbconn = Jdbc.getConnection(url,username,password);
  var mysqlquery = mysqldbconn.createStatement(); 
  callstoredprocedure = "{call [dbo].[testemployee](?)}";
  mysqlquery = mysqldbconn.prepareCall(callstoredprocedure);
  
  mysqlquery.setString(1, empname);
  mysqlquery.executeUpdate();

这给了我这个错误“必须声明标量变量”@empname“”。

1 个答案:

答案 0 :(得分:1)

也许阅读本文可能对您有所帮助: Calling MySQL Stored Procedures from JDBC

这是你出错的地方:

mysqlquery = mysqldbconn.prepareCall(vstrSQLStatement);

您不使用声明的'callstoredprocedure'。

阅读以下示例:

public static void getSkills(int candidateId) {
    // 
    String query = "{ call get_candidate_skill(?) }";
    ResultSet rs;

    try (Connection conn = MySQLJDBCUtil.getConnection();
            CallableStatement stmt = conn.prepareCall(query)) {

        stmt.setInt(1, candidateId);

        rs = stmt.executeQuery();
        while (rs.next()) {
            System.out.println(String.format("%s - %s",
                    rs.getString("first_name") + " "
                    + rs.getString("last_name"),
                    rs.getString("skill")));
        }
    } catch (SQLException ex) {
        System.out.println(ex.getMessage());
    }
}

让我解释一下: 定义了查询,类似于您的调用接受1参数,不返回任何值。然后在conn.prepareCall()中使用它,然后将参数设置为该语句,然后执行它。

正如我所提到的,你应该这样做:

mysqlquery = mysqldbconn.prepareCall(callstoredprocedure);

如果这解决了您的问题,请告诉我。