gpt4 book ai didi

java - 使用问题?从 Java 更新时用于 MySQL 存储过程的通配符

转载 作者:行者123 更新时间:2023-11-29 04:18:40 25 4
gpt4 key购买 nike

我有以下 Java 类,它接受 11 个参数并使用它们在数据库中创建新记录。存储过程在 MySQL 中经过测试和工作,但我无法让访问它的 Java 类工作:

public void insert_saved_pub_set(int user_id, String presProfile, String procProfile, String dateLabel, String doc_id, String pubName, String lastLoaded, String publicV, String label, String description, String out_id)
throws SQLException {

String sql = "call insert_saved_pub_set(?,?,?,?,?,?,?,?,?,?,?);";

PreparedStatement stmt = conn.prepareStatement(sql);

stmt.setInt(1, user_id);
stmt.setInt(2, Integer.parseInt(presProfile));
stmt.setInt(3, Integer.parseInt(procProfile));
stmt.setString(4, dateLabel);
stmt.setInt(5, Integer.parseInt(doc_id));
stmt.setString(6, pubName);
stmt.setInt(7, Integer.parseInt(lastLoaded));
stmt.setInt(8, Integer.parseInt(publicV));
stmt.setString(9, label);
stmt.setString(10, description);
stmt.setInt(11, Integer.parseInt(out_id));

stmt.executeUpdate(sql);

}

我尝试测试时遇到的错误是:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?,?,?,?,?,?,?,?,?,?,?)' at line 1

我已经使用硬编码值测试了来自 Java 的准备好的语句并且它有效,但是我用通配符做了一些愚蠢的事情并且我盯着它看了太久。

** 评论添加在下面修复后 **

只是为了关闭它,固定代码如下所示:

public void insert_saved_pub_set(int user_id, String presProfile, String procProfile, String dateLabel, String doc_id, String pubName, String lastLoaded, String publicV, String label, String description, String out_id)
throws SQLException {

String sql = "call insert_saved_pub_set(?,?,?,?,?,?,?,?,?,?,?);";

CallableStatement cStmt = conn.prepareCall(sql);

cStmt.setInt(1, user_id);
cStmt.setInt(2, Integer.parseInt(presProfile));
cStmt.setInt(3, Integer.parseInt(procProfile));
cStmt.setString(4, dateLabel);
cStmt.setInt(5, Integer.parseInt(doc_id));
cStmt.setString(6, pubName);
cStmt.setInt(7, Integer.parseInt(lastLoaded));
cStmt.setInt(8, Integer.parseInt(publicV));
cStmt.setString(9, label);
cStmt.setString(10, description);
cStmt.setInt(11, Integer.parseInt(out_id));

cStmt.executeUpdate();
}

}

最佳答案

executeUpdate(String) 方法继承自 Statement 并尝试按原样执行给定的 SQL 语句——无需占位符替换。

executeUpdate() method (无参数),在 PreparedStatement 中声明,将执行占位符替换。这适用于 PreparedStatements,例如更新语句。

此外,您并未在此处直接运行 SQL 语句。您正在调用存储过程。从 PreparedStatement 切换到 CallableStatement .

CallableStatement cStmt = conn.prepareCall(sql);

“set”方法像以前一样工作,但随后您调用 execute() 来执行 CallableStatement

关于java - 使用问题?从 Java 更新时用于 MySQL 存储过程的通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32386250/

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