gpt4 book ai didi

java - 调用 mySql 过程时出现错误

转载 作者:行者123 更新时间:2023-11-29 13:47:46 25 4
gpt4 key购买 nike

我已经创建了一个用于更新不同表(例如国家和部门)的单个程序。在过程中,我提到了表名称的输入参数以及其他参数。但不幸的是我遇到了一个错误。这是 mySql 程序:

CREATE DEFINER=`satish`@`%` PROCEDURE `p_update_Master_Name`(
IN tbl_Name VARCHAR(35),
IN tbl_column_old_value VARCHAR(35),
IN tbl_column_new_value VARCHAR(35),
IN tbl_user_id INT,
OUT msg INT
)
BEGIN
IF EXISTS (SELECT Name from tbl_name where Name = tbl_column_new_value) then
SET msg := '1';
-- failed case

else

UPDATE tbl_name SET Name= tbl_column_value, Modified_Date=now(), Modified_by=tbl_user_id where Name = tbl_column_old_value;
set msg := '0';
-- success
END IF;
END

我从 java 文件调用此过程。

CallableStatement cs = conn.prepareCall("{ call p_update_Master_Name(?,?,?,?,?)}");
cs.setString(1, "country");
cs.setString(2, real);
cs.setString(3, mod);
cs.setInt(4, 01);
cs.execute();
cs.registerOutParameter(5, Types.INTEGER);
int i=cs.getInt(5);

但它给了我一个 mysql.jdbc 异常。

com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Table 'sims.tbl_name' doesn't 
exist

请帮助我。提前致谢

最佳答案

您不能在静态 SQL 查询中使用变量来定义表或列(或任何其他数据库对象)名称。它们应该是文字。

您必须使用动态 SQL 来实现您的目标。阅读有关该主题的更多信息 SQL Syntax for Prepared Statements

您的存储过程可能如下所示

DELIMITER $$
CREATE PROCEDURE p_update_Master_Name
(
IN tbl_Name VARCHAR(35),
IN tbl_column_old_value VARCHAR(35),
IN tbl_column_new_value VARCHAR(35),
IN tbl_user_id INT,
OUT msg INT
)
BEGIN
SET @sql = CONCAT('SELECT (COUNT(*) > 0) INTO @result FROM ', tbl_name, ' WHERE Name = \'', tbl_column_new_value, '\'');
PREPARE stmt FROM @sql;
EXECUTE stmt;

SET msg = @result;

IF @result = 0 THEN
SET @sql = CONCAT('UPDATE ', tbl_name,
' SET Name = \'', tbl_column_new_value,
'\', Modified_Date = NOW(), Modified_by = ', tbl_user_id,
' WHERE Name = \'', tbl_column_old_value, ' \'');
PREPARE stmt FROM @sql;
EXECUTE stmt;
END IF;
DEALLOCATE PREPARE stmt;
END$$
DELIMITER ;

这里是SQLFiddle 演示

关于java - 调用 mySql 过程时出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17160678/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com