2013-06-30 69 views
2

我想通過JAVA上的JDBC連接向Teradata插入空數據。所有的 首先我試試這個:如何插入空數據?

PreparedStatement stmt; 
String qm="Insert into db.user values (?,?,?,?,?,?,?)"; 
connection= DriverManager.getConnection 
      (
       "jdbc:teradata://192.xxx.x.xx/database=DBC,tmode=ANSI,charset=UTF8","user","passw0rd"   ); 
stmt = connection.prepareStatement(qm); 
//some code here to open while loop 
    stmt.setObject(i,null); // This isnt working with Terada JDBC. It is working for Oracle and MSSQL JDBC 
//and I finish my code  

,後,我試過這個,而不是stmt.setObject(i,null);

stmt.setNull(i,rsmd.getColumnType(i),rsmd.getColumnTypeName(i)); rsmd.getColumnType(i)等於97 rsmd.getColumnTypeName(i)等於DATE

是的,它是真的我的領域是DATE。

但它給出了這樣的錯誤: ERROR : [Teradata JDBC Driver] [TeraJDBC 14.10.00.17] [Error 857] [SQLState HY000] Two different data types are being set for parameter 17 (449 & 749)

我怎樣才能解決這個問題。

回答

0

通常,如果你想INSERT一個NULL值到ColC我會建議使用下面的方法與你的INSERT ... VALUES聲明:

INSERT (ColA, ColB, ColD, ColE) VALUES (1000, 'Testing Null', 1.00, DATE '2013-06-30); 

的Teradata將沒有列在INSERT聲明爲該列放置預定義的DEFAULT值或NULL

如果你嘗試以下方法:

stmt.SetNull(i,Types.NULL) 
+0

感謝您的回覆,但我想在JDBC中使用preparerestatament。所以我沒有改變使用你的方法,因爲我不知道哪一列爲空 –

+0

請參閱編輯答案的建議。 –

0

此問題的解決方法是將NULL轉換爲VARCHAR,以便它兼容。

INSERT INTO XYA(PKEY,REF_KEY) VALUES(2,cast(null as varchar(10))); 
+0

感謝您的支持。我正在使用JDBC連接。所以我需要使用SetObject或SetNull函數 –

1

我過去在TD定製DB層使用的setNull(I,類型#字段類型#)。

但是,如果您搜索異常中返回的代碼,您會發現它們代表Date和Varchar,就好像在相同的位置上,有時會傳遞Date類型,有時傳遞Varchar。

您是否偶然將不爲空的日期傳遞爲類日期字符串(例如「2015-08-18」),而不是java.sql.Date對象?

如果是這種情況,您應該更改代碼以使用java.sql.Date對象,這將解決您的問題。