2015-01-06 52 views
1

我想要使用if語句來檢查一個值是否等於999999,並且它是否需要將DEFAULT值插入到數據庫中。通過java將整數的默認值插入到sql server

 if (s.getYear() == 999999) 
     { 
      pstatement.setString(3, "DEFAULT"); 
     } 
     else 
     { 
      pstatement.setInt(3, s.getYear()); 
     } 

相當明顯,sqlserver拒絕一個String/Varchar插入到一個整數字段。

com.microsoft.sqlserver.jdbc.SQLServerException: Conversion failed when converting the nvarchar value 'DEFAULT' to data type int. 

有誰知道如何插入該字段的默認值?

感謝

+0

@BorisPavlović我相信OP [意思是這個](http://sqlfiddle.com/#!3/5352c/1) – StuartLC

回答

0

你要管理它通過使用SQL形式的數據庫側,
SQL

ALTER TABLE `xxx` ALTER `supplier_id` SET DEFAULT NULL 

或者

休眠如果你正在使用Hibernate,您可以設置默認值使用@Column

@Column(name = 「myColumn」, nullable = false, columnDefinition = 「int default 100") 
0

當告知SQL服務器通過JDBC插入過程中使用的列的默認,據我所知,你需要明確改變DML語句,以便文字DEFAULT用作字段的值,即僞

if (willUseDefault) 
    sql = "INSERT INTO MyTable(Col1, Col2, ColWithDefault) VALUES (?, ?, DEFAULT)"; 
else 
    sql = "INSERT INTO MyTable(Col1, Col2, ColWithDefault) VALUES (?, ?, ?)"; 

然後你將不會綁定準備語句的參數3的值。

對列使用默認值的另一種方法是完全忽略插入列列表中的字段。這同樣會要求你調整你的DML語句。

if (willUseDefault) 
    sql = "INSERT INTO MyTable(Col1, Col2) VALUES (?, ?)"; 
else 
    sql = "INSERT INTO MyTable(Col1, Col2, ColWithDefault) VALUES (?, ?, ?)"; 

如果多列以這種方式有條件地違約,這會變得相當混亂。

+0

相似的[這裏提問](http://stackoverflow.com/a/25781909/314291 ),似乎沒有辦法通過參數設置'DEFAULT'。 – StuartLC