Java 如何插入空数据?
我想通过JAVA上的JDBC连接将空数据插入Teradata。 首先,我尝试以下方法: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,
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