【问题标题】:how to insert values into DB using procedure如何使用过程将值插入数据库
【发布时间】:2016-02-07 05:31:30
【问题描述】:

我已经创建了一个名为 SET 的过程,我正在尝试通过 java 向它发送值,有点像这样。

stmt.executeQuery("call set("+id+",'"+name+"','"+sal+"','"+dept+"')");

因为name、sal和dept都是String格式。

但我遇到了错误。

查看与您的 MySQL 服务器版本相对应的手册,在第 1 行的“set(12,'D','12','cse')' 附近使用正确的语法

【问题讨论】:

标签: java mysql stored-procedures jdbc


【解决方案1】:

“set”是reserve word in Mysql,所以可能是你的问题。一般建议是避免保留字词并有意义地命名您的程序(例如 setAccountRecrod)。

当我设法使用该名称创建过程时,我必须使用转义名称(带有反勾号)调用它:

stmt.executeQuery("call `set`("+id+",'"+name+"','"+sal+"','"+dept+"')");

但按照建议,最好像这样使用prepareCall

callableStatement = dbConnection.prepareCall("call `set`(" + id + ",'" + 
     name + "','" + sal + "','" + dept + "')");
callableStatement.executeUpdate();

甚至更好:

callableStatement = dbConnection.prepareCall("call `set`(?,?,?,?)");
callableStatement.setInt(1, id);
callableStatement.setString(2, name);
callableStatement.setString(3, sal);
callableStatement.setString(4, dept);
callableStatement.executeUpdate();

当我创建这样的程序时,以上所有内容都适用于最新版本的 MariaDb:

DELIMITER $$

DROP PROCEDURE IF EXISTS `set`;

CREATE PROCEDURE `set` (IN id INT, name VARCHAR(25), sal VARCHAR(25), dept VARCHAR(25)) 
BEGIN
SELECT VERSION();
END $$

DELIMITER ;

【讨论】:

    【解决方案2】:

    可以通过CallableStatement调用存储过程如图here

    祝你好运

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-30
      • 2019-09-26
      • 2018-01-31
      • 1970-01-01
      • 2019-09-25
      • 1970-01-01
      相关资源
      最近更新 更多