如何使用过程将值插入数据库
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 数据库?