如何使用过程将值插入数据库

Posted

技术标签:

【中文标题】如何使用过程将值插入数据库【英文标题】: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')' 附近使用正确的语法

【问题讨论】:

应该是call ....。详见 JDBC 教程:docs.oracle.com/javase/tutorial/jdbc/basics/… 【参考方案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

祝你好运

【讨论】:

以上是关于如何使用过程将值插入数据库的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 JDBC 将值插入 Microsoft Access 数据库?

如何使用自定义插件将值插入 Joomla 2.5 DB

如何将值插入数据库(Microsoft 访问)?

如何仅在创建时将值插入数据库?(SQLite Android Studio)

使用雪花中的存储过程将值插入表中

将值插入到存在于多个数据库中的表中