如果我总是在准备好的语句中使用 varchar 设置 null 会发生啥?
Posted
技术标签:
【中文标题】如果我总是在准备好的语句中使用 varchar 设置 null 会发生啥?【英文标题】:What would happen if I set null in prepared statement with varchar always?如果我总是在准备好的语句中使用 varchar 设置 null 会发生什么? 【发布时间】:2009-07-31 22:57:17 【问题描述】:我有这种方法使用 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,我需要使用"setNull(int, int)"方法,但是我必须指定SQL类型:
...注意:您必须指定参数的 SQL 类型。
但是...我不知道类型,所以我正在考虑使用 always VARCHAR(只是因为)
setNull( index,Types.VARCHAR); .
如果我在准备好的语句中始终使用 varchar 设置 null 会发生什么?
我正在使用:
Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production
使用 Oracle JDB 驱动程序:
11.1.0.7.0-Production ( ojdbc6.jar )
还有什么选择?
【问题讨论】:
【参考方案1】:不能通过ResultSetMetaData
接口查询数据库获取列类型吗?
【讨论】:
有点复杂。我在玩弄额外的活力(有点)所以我真的不知道列的确切位置。但相反,我根据列名设置位置(例如 EMPL_ID 可能是第 20 列,但我将其设置为我 pstmt 上的第 1 列.....) 等等,等等……它开始变得有意义了……嗯嗯……让我咀嚼一会儿……如果我这样做(从表中选择 * 1 = 0 ; 获取 ResultSetMetadata 并使用列名获取类型 ...(不!我将来会看到另一个 Map以上是关于如果我总是在准备好的语句中使用 varchar 设置 null 会发生啥?的主要内容,如果未能解决你的问题,请参考以下文章
如果在循环中使用 MySQLi 准备好的语句,我啥时候调用 bind_param?