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)

我怎样才能解决这个问题。

4

3 回答 3

1

我过去在 TD 的自定义 DB 层中使用了 setNull(i, Types.#field type#)。

但是,如果您搜索异常中返回的代码,您会发现它们代表一个 Date 和一个 Varchar,就好像在同一位置,您有时传递一个 Date 类型,有时传递一个 Varchar。

您是否偶然将非空日期作为类似日期的字符串(例如“2015-08-18”)而不是作为 java.sql.Date 对象传递?

如果是这种情况,您应该更改代码以使用 java.sql.Date 对象,这将解决您的问题。

于 2015-08-17T22:03:09.727 回答
0

此问题的解决方法是将 NULL 强制转换为 VARCHAR,以便它兼容。

INSERT INTO XYA(PKEY,REF_KEY) VALUES(2,cast(null as varchar(10)));
于 2013-06-30T18:40:58.753 回答
0

通常,如果您希望将INSERTNULL转换为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)
于 2013-06-30T19:15:16.887 回答