CREATE LINKED TABLE 不使用 PreparedStatement
CREATE LINKED TABLE not working with PreparedStatement
我正在尝试 运行 以下 PreparedStatement:
final PreparedStatement ps = conn.prepareStatement("CREATE LINKED TABLE IF NOT EXISTS " + linkedName + "(?, ?, ?, ?, 'ROADS', ?)");
但是当调试器 运行 超过前一行时,我得到错误:
Syntax error in SQL statement "CREATE LINKED TABLE IF NOT EXISTS
ROAD_TABLE_LINKED(?,[*] ?, ?, ?, 'ROADS', ?)"; expected "string";
SQL statement: CREATE LINKED TABLE IF NOT EXISTS
ROAD_TABLE_LINKED(?, ?, ?, ?, 'ROADS', ?) [42001-199]
是否不能将 PreparedStatement 与 CREATE LINKED 一起使用 TABLE?
编辑:如果我使用普通语句并插入参数,它工作正常。
很遗憾,您不能在 H2 的 DDL 命令中使用参数 (?
)。您需要用字符串文字替换它们。
Statement s = connection.createStatement();
s.execute("CREATE LINKED TABLE IF NOT EXISTS \""
+ linkedName.replaceAll("\"", "\"\"")
+ "\"('', '"
+ url.replaceAll("'", "''")
+ "', '"
+ user.replaceAll("'", "''")
+ "', '"
+ password.replaceAll("'", "''")
+ "', '"
+ schema.replaceAll("'", "''")
+ "', '"
+ table.replaceAll("'", "''")
+ "')");
我正在尝试 运行 以下 PreparedStatement:
final PreparedStatement ps = conn.prepareStatement("CREATE LINKED TABLE IF NOT EXISTS " + linkedName + "(?, ?, ?, ?, 'ROADS', ?)");
但是当调试器 运行 超过前一行时,我得到错误:
Syntax error in SQL statement "CREATE LINKED TABLE IF NOT EXISTS ROAD_TABLE_LINKED(?,[*] ?, ?, ?, 'ROADS', ?)"; expected "string"; SQL statement: CREATE LINKED TABLE IF NOT EXISTS ROAD_TABLE_LINKED(?, ?, ?, ?, 'ROADS', ?) [42001-199]
是否不能将 PreparedStatement 与 CREATE LINKED 一起使用 TABLE?
编辑:如果我使用普通语句并插入参数,它工作正常。
很遗憾,您不能在 H2 的 DDL 命令中使用参数 (?
)。您需要用字符串文字替换它们。
Statement s = connection.createStatement();
s.execute("CREATE LINKED TABLE IF NOT EXISTS \""
+ linkedName.replaceAll("\"", "\"\"")
+ "\"('', '"
+ url.replaceAll("'", "''")
+ "', '"
+ user.replaceAll("'", "''")
+ "', '"
+ password.replaceAll("'", "''")
+ "', '"
+ schema.replaceAll("'", "''")
+ "', '"
+ table.replaceAll("'", "''")
+ "')");