我在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“”。
答案 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);
如果这解决了您的问题,请告诉我。