我們也有類似如下的Java代碼:PreparedStatement的是SQL Server上的prepareStatement執行
PreparedStatement stmt = connection.prepareStatement("drop login tmp");
int result = stmt.executeUpdate();
當通過調試運行,似乎正在執行的第一線後我們的SQL語句執行,甚至在第二行執行之前。當第二行執行時,刪除SQL再次執行,並且導致錯誤,因爲用戶名tmp不再存在。
這隻發生在SQL Server上,而不是針對Oracle和Postgres的類似刪除SQL查詢。
這是一個已知的問題?除了轉移到Statement而不是PreparedStatement之外,是否有一個常見的解決方法?
那麼,你的陳述不包括任何變量,所以實際上沒有什麼需要「準備」。你有沒有試過只用一個陳述? – 2009-08-16 14:43:30
我同意drop不是一個準備好的陳述的好候選人,事實上,我們切換到陳述並解決問題。 但是,這是一個庫代碼,我們可能需要將它用於不同的查詢,所以我想找到問題的根源。 – splintor 2009-08-17 06:41:44