2013-06-30 3 views
2

Я хочу вставить нулевые данные в Teradata с JDBC-соединением на JAVA. Прежде всего я стараюсь это:Как вставить нулевые данные?

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

Да это true мое поле - 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. Поэтому у меня нет изменений, чтобы использовать ваш метод, потому что я не знаю, какой столбец является нулевым. –

+0

См. Отредактированный ответ для предложения. –

0

Обходной путь для этой проблемы заключается в том, чтобы указать NULL как VARCHAR, чтобы он был совместим.

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

спасибо за анзирование. Я использую JDBC-соединение. Так что мне нужно использовать функцию SetObject или SetNull –

1

я использовал в прошлом SetNull (I, типы # Тип поля #.) В пользовательском DB слоя для TD.

Однако, если вы ищете коды, возвращенные в исключении, вы обнаружите, что они представляют дату и Varchar, как будто в той же позиции вы иногда передаете тип Date, а иногда и Varchar.

Вы случайно передаете нулевые даты как даты-подобные строки (например, «2015-08-18»), а не как объекты java.sql.Date?

Если это так, вы должны изменить код для использования объектов java.sql.Date, и это решит вашу проблему.

Смежные вопросы