在 Java 中,我们会做类似的事情:
stmt.execute("SELECT * FROM users");
但是对于像这样的存储过程:
stmt.execute("{CALL createUser(?,?,?,?)}");
为什么我们需要{
以及}
在普通 SQL 中不需要的时候?
JDBC 是从 ODBC 派生的。实际上,第一个 jdbc 驱动程序是 jdbc 到 odbc 的桥接器。所以使用 ODBC 语法是有意义的。大括号本身表示函数调用,存储过程基本上是用户定义的函数,因此它们用大括号包裹。
花括号是存储过程的转义语法。当 JDBC 驱动程序遇到 时{call createUser(?,?,?,?)}
,它会将这种转义语法翻译成数据库用来调用存储过程的原生 SQL。
这是有关 JDBC 转义语法的官方文档: https ://docs.oracle.com/cd/E13157_01/wlevs/docs30/jdbc_drivers/sqlescape.html
以及一些特定于供应商的描述: