Java 如果我总是在带有varchar的prepared语句中设置null,会发生什么?

Java 如果我总是在带有varchar的prepared语句中设置null,会发生什么?,java,jdbc,oracle10g,prepared-statement,Java,Jdbc,Oracle10g,Prepared Statement,我使用jdbc插入数据,jdbc将根据java类型插入值。大概是这样的: Object o = map.get( key ); if( o == null ) { // setNull( index ); } else if( o instanceof String ) { // setString( index, (String) o ); } else if( o instanceof Timestamp ) { // setTimestampt( index,

我使用jdbc插入数据,jdbc将根据java类型插入值。大概是这样的:

Object o = map.get( key );

if( o == null ) {
    // setNull( index );
} else  if( o instanceof String ) {
    // setString( index, (String) o );
} else if( o instanceof Timestamp ) {
    // setTimestampt( index, ( Timestamp ) o );
} else if( o instanceof Integer ) {
    // setInt( index, (Integer) o );
}
    index++;
它有一个问题,虽然旁边是所有评论:p

如果o的值为null,则要求我使用方法,但我必须指定SQL类型:

…注意:必须指定参数的SQL类型

但是。。。我不知道类型,所以我考虑使用always VARCHAR只是因为

setNull( index,Types.VARCHAR); .
如果我总是在带有varchar的prepared语句中设置null,会发生什么

我正在使用:

Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production
使用Oracle JDB驱动程序:

11.1.0.7.0-Production ( ojdbc6.jar ) 

另一种选择是什么?

您不能通过ResultSetMetaData接口查询数据库并获取列类型吗?

这有点复杂。我在玩弄一种额外的动力,所以我没有柱子的确切位置。但是我根据列名设置位置,比如emp_ID可能是第20列,但我将其设置为pstmt上的第1列。。。。。等等,等等。。。它开始有意义了。。。。嗯。。。。让我嚼一会儿。。。如果我从表中选择*,其中1=0;获取ResultSetMetadata并使用columnname获取类型。。。哦,不!我看到了我未来的另一张地图。。。难道你不能得到输入值和类型,而不是现在得到的值吗?@OpenSource。。。我可能会,只是来源不是一张SQL表格,我喜欢地图,奥斯卡。像兄弟一样爱他们。