2017-02-08 14 views
1

比方說,我想在我的表格中添加一列。如果我在沒有重新啓動應用程序的情況下在數據庫中添加列,那麼我的應用程序將因「緩存的計劃不能更改結果類型」而失敗,因爲在此列添加後進行通配符選擇的查詢的返回類型會發生變化。如何避免緩存計劃不能改變結果類型錯誤?

JDBC驅動程序的Postgres後一定閾值會自動創建準備好的聲明,默認閾值是5

要麼我可以通過設置prepareThreshold禁用它以0這是不好的,因爲我失去了在準備好的聲明的好處優化驅動程序正在爲我做。

或者我將不得不改變我所有的SQL語句來指定它將操作的列的確切列表。所以,編寫像「SELECT * FROM TABLE」這樣的語句是不可行的。

有沒有其他方法可以解決這個問題?

+0

我有同樣的問題。你有沒有找到解決辦法?也許有一些解決方案可以在發生錯誤時手動清除緩存計劃? –

回答

1

在SQL查詢中使用*是個壞習慣(除了在某些情況下,如count(*)),原因是添加列時查詢可能突然失敗或行爲不同。

如果您確實需要這樣做,您可以捕獲該異常,關閉準備好的語句並使用相同的查詢字符串重新創建一個新語句。