Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何插入空数据?_Java_Jdbc_Teradata - Fatal编程技术网

Java 如何插入空数据?

Java 如何插入空数据?,java,jdbc,teradata,Java,Jdbc,Teradata,我想通过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,

我想通过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)
等于日期

是的,我的领域是日期

但它给出了这样一个错误:
ERROR:[Teradata JDBC Driver][TeraJDBC 14.10.00.17][ERROR 857][SQLState HY000]正在为参数17(449和749)设置两种不同的数据类型。


如何修复此问题。

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

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

通常,如果您希望
ColC
中插入
NULL
值,我建议您在插入
时使用以下方法。。。值
语句:

INSERT (ColA, ColB, ColD, ColE) VALUES (1000, 'Testing Null', 1.00, DATE '2013-06-30);
Teradata将在
INSERT
语句中不包含该列,以放置该列的预定义
DEFAULT
值或
NULL

如果您尝试以下方法会怎么样:

stmt.SetNull(i,Types.NULL)

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

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

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


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

感谢您的支持。我正在使用JDBC连接。所以我需要使用SetObject或SetNull函数。谢谢回复,但我想在JDBC中使用PrepareStatent。因此,我没有更改使用您的方法,因为我不知道哪列为null