2011-06-27 53 views
3

我有一個PreparedStatement,用於插入一大堆列數據的行。但是,對於其中一列(時間戳),如果該值爲空,我希望它在服務器上執行getDate()如何在JDBC PreparedStatement中設置公式

據我所知,我可以只做new Date(),但這並不奏效,因爲由於遺留報告,它需要完全匹配具有自動插入值的另一列。

讓我們也說我不能改變模式,並添加一個默認值的列。

有沒有什麼辦法可以在PreparedStatement中將公式設置爲參數?

編輯添加的: 下面是它本質上是什麼目前:

PreparedStatement statement = connection.prepareStatement("insert into row (name, starttime) values (?, ?)") 
statement.setString(1, name); 
statement.setDate(2, date); 

我要的是,這樣的:

PreparedStatement statement = connection.prepareStatement("insert into row (name, starttime) values (?, ?)") 
statement.setString(1, name); 
if(date != null) 
    statement.setDate(2, date); 
else 
    statement.setFormula(2, "getdate()"); 

我的理解是:

if(date == null) 
    date = new Date(); 

是基本上是一樣的東西,但在我們的情況下,它不是。

+0

你能再詳細一點嗎?我對手邊的實際問題感到困惑。你提到什麼樣的配方,作爲預備聲明的一部分,它有什麼好處? – Peaches491

+0

@ Peaches491編輯以獲取更好的信息 –

回答

4

它的工作原理簡單地準備了形式

insert into row(name, starttime) 
    values(?, coalesce(?, getdate()) 

的聲明?然後設置一個空的第二個參數應該會導致一個getdate()調用?

+0

美麗。謝謝。 –

3

我能想到的唯一選擇是,因爲您無法更改模式,因此您需要準備兩條語句,一條使用查詢中的默認getdate(),另一條使用參數。然後,你可以簡單地這樣做:

PreparedStatement ps = (date == null) ? prepareWithDefault : prepareWithoutDefault; 

// Set all variables // 

if (date != null) { 
    ps.setDate(date); 
} 

ps.execute(); 
+0

是的......我認爲這真的是唯一的解決方法....自從我將sql抽象出來後,這真是太糟糕了 –

相關問題