【发布时间】:2009-08-16 14:02:00
【问题描述】:
我们有一个类似于下面的 Java 代码:
PreparedStatement stmt = connection.prepareStatement("drop login tmp");
int result = stmt.executeUpdate();
通过调试器运行时,似乎我们的SQL语句是在第一行执行之后执行的,甚至在第二行执行之前执行。执行第二行时,再次执行 drop SQL,并导致错误,因为用户名 tmp 不再存在。
这只会发生在 SQL Server 上,但不会发生在具有类似 drop SQL 查询的 Oracle 和 Postgres 上。
这是一个已知问题吗?除了转移到 Statement 而不是 PreparedStatement 之外,还有其他常见的解决方法吗?
【问题讨论】:
-
嗯,你的陈述不包含任何变量,所以真的没有什么要“准备”的。您是否尝试过仅使用语句?
-
我同意 drop 不是准备好的语句的好候选者,事实上,我们切换到语句并且问题解决了。但是,这是一个库代码,我们可能需要将它用于不同的查询,所以我想找到问题的根源。
标签: java sql-server jdbc