我知道如何使用NamedParameterJdbcTemplate在mysql表中插入,更新和删除数据。但是如何创造&放桌?
答案 0 :(得分:1)
您可以像执行DML语句一样创建表或删除表... SQL语句作为字符串传递给数据库引擎。
我怀疑你问的是,是否可以在SQL语句中提供标识符(例如table_name),方法是将其作为值用于执行预准备语句的绑定占位符。 e.g。
CREATE TABLE ? (mycol INT)
或
CREATE TABLE :my_table_name (mycol INT)
简短的回答是,它无法做到这一点。
语句中的标识符(例如表名)必须与SQL文本中一样。就像关键字SELECT
和FROM
必须出现在SQL文本中一样,并且不能通过绑定占位符作为值提供。
我们可以在SELECT语句中演示限制,试图将表或视图的名称作为绑定占位符提供。这个位置?
或命名占位符是否无关紧要。
这不起作用:
SELECT t.col c FROM ? t LIMIT 1
这不起作用:
SELECT 2 AS :col_alias FROM :v_table_name LIMIT 1
如果您了解SQL优化器在准备和执行语句时执行的操作,则有关标识符的限制是有意义的。
此限制适用于SELECT语句。以及DML语句(INSERT,UPDATE,DELETE)和DDL语句(CREATE,ALTER,DROP)。
执行DDL语句的另一个潜在问题是导致隐式提交。我们需要注意在交易环境中正确处理。
如果需要执行动态DDL语句,为变量提供标识符,有两种基本方法:
1)动态地将SQL文本构造为字符串,以便表名(和其他标识符)是SQL文本的一部分,而不是绑定占位符。
2)创建一个将执行该语句的存储过程,并调用存储过程。存储过程的参数可以作为绑定占位符传递。