Spring中jdbctemplet的时候如果有需要插入null的应该怎么处理啊!

luyang1016 2007-07-19 07:13:36
Spring中jdbctemplet的时候如果有需要插入null的应该怎么处理啊!

原代码如下啊:
String strSql = "insert into table ( filed1,filed2) values (?,?)";
Object[] _obj=new Object[2];
_obj[0] = System.currentTimeMillis();
_obj[1] = null;
jdbctemplet.update(strSql,_obj);

后台打印出来语句:
insert into table ( filed1,filed2) values ('1184841010859','null')

后台提示错误:
PreparedStatementCallback; uncategorized SQLException for SQL [insert into table ( filed1,filed2) values (?,?)]; SQL state [null]; error code [17004]; 无效的列类型; nested exception is java.sql.SQLException: 无效的列类型
org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback; uncategorized SQLException for SQL [insert into table ( filed1,filed2) values (?,?)]; SQL state [null]; error code [17004]; 无效的列类型; nested exception is java.sql.SQLException: 无效的列类型
java.sql.SQLException: 无效的列类型

Spring的jdbctemplet怎么设置能打印出来这样的语句
insert into table (filed1,filed2) values ('1184841010859',null)

===========================这样没问题
如果不插入null就不会出错
String strSql = "insert into table ( filed1,filed2) values (?,?)";
Object[] _obj=new Object[2];
_obj[0] = System.currentTimeMillis();
_obj[1] = "test";
jdbctemplet.update(strSql,_obj);
...全文
1570 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
自然80 2007-07-23
  • 打赏
  • 举报
回复
//spring 的源码,所以可以看出,直接付成null就行了(StatementCreatorUtils.java)
public static void setParameterValue(
PreparedStatement ps, int paramIndex, int sqlType, String typeName, Object inValue)
throws SQLException {

if (logger.isDebugEnabled()) {
logger.debug("Setting SQL statement parameter value: column index " + paramIndex +
", parameter value [" + inValue +
"], value class [" + (inValue != null ? inValue.getClass().getName() : "null") +
"], SQL type " + (sqlType == SqlTypeValue.TYPE_UNKNOWN ? "unknown" : Integer.toString(sqlType)));
}

if (inValue == null) {
if (sqlType == SqlTypeValue.TYPE_UNKNOWN) {
ps.setNull(paramIndex, Types.NULL);
}
else if (typeName != null) {
ps.setNull(paramIndex, sqlType, typeName);
}
else {
ps.setNull(paramIndex, sqlType);
}
}
自然80 2007-07-23
  • 打赏
  • 举报
回复
table ( filed1,filed2)的表结构是什么?
bewitchgirl 2007-07-22
  • 打赏
  • 举报
回复
简单说就是我怎么能用spring实现这样的东西
insert into table(filed) value(null)


我以前用jdbc的时候
直接
String strSql ="insert into table(filed) value(null)"
Stmt.executeUpdate(strSql );

就可以了啊




String strSql = "insert into table ( filed1,filed2) values (?,?)";
Object[] _obj=new Object[2];
_obj[0] = System.currentTimeMillis();
_obj[1] = null;
jdbctemplet.update(strSql,_obj);


结果现在反而不行啊

系统以为我是"insert into table ( filed1,filed2) values (xxxx,'null')";







================================

其实_obj[1] = null是我为了表达意思啊
其实应该是!
_obj[1] = request.getParameter("xx") ;
request.getParameter("xx") ;如果不是必须输入项就可能是null啊!




可是jdbctemplet这个对象如果我插入的是null !
就给我认成'null'
并且第二个字段没准阿
有可能是int有可能是String
所以我的问题就在这里拉
我希望直接就是NULL的插入而不要让我通过判断类型而插入不同的啊。。





现在程序已经开发完了所以逐一改变会很复杂啊
把insert into table ( filed1,filed2) values (?,?)改成insert into table ( filed1,filed2) values (变量1,变量2)



bewitchgirl 2007-07-22
  • 打赏
  • 举报
回复
我的表达有问题啊。~~~~~~~~~~~不知道该怎么说了
我在尝试这样表达一下我的问题!

我的意思是:



String strSql = "insert into table ( filed1,filed2) values (?,?)";
Object[] _obj=new Object[2];
_obj[0] = System.currentTimeMillis();
_obj[1] = null;
jdbctemplet.update(strSql,_obj);


_obj[1]可能是任何类型,(这个等于null的不一定是String有可能是int)
既:
spring怎么设置,也就是jdbctemplet这个对象怎么用,能实现这样的效果!
insert into table (filed1,filed2) values ('1184841010859',null)

而且不是

insert into table ( filed1,filed2) values ('1184841010859','null')

也就是说只要其中一个对象是null,sql语句就是null而不是'null'





bewitchgirl 2007-07-22
  • 打赏
  • 举报
回复
insert into table ( filed1,filed2) values ('1184841010859','')

这样不行啊!因为不知道filed2 是不是String啊!
有可能是int类型的啊!
zgh2003 2007-07-20
  • 打赏
  • 举报
回复
insert into table ( filed1,filed2) values ('1184841010859','')
shuai45 2007-07-20
  • 打赏
  • 举报
回复
insert into table (filed1,filed2) values ('1184841010859',null)
因为你用的是占位符,如果filed2是string形的 那其占位符必然也是string形的.
shuai45 2007-07-20
  • 打赏
  • 举报
回复
如果filed2是string形的 如果 _obj[1] = null; 那定义一string形的空字符串
bewitchgirl 2007-07-20
  • 打赏
  • 举报
回复
汗~~~~~~~~~~~~~!可能我没表达清楚啊

前台有些项目允许空
但是后台取出的数值就是null

这时候用spring的jdbctemplet插入的时候就会有问题!
因为他把null认为是'null',我想知道的是怎么设置能让jdbctemplet拼成的sql是
insert into table (filed1,filed2) values ('1184841010859',null)

而且不是

insert into table ( filed1,filed2) values ('1184841010859','null')


这是我的代码





String strSql = "insert into table ( filed1,filed2) values (?,?)";
Object[] _obj=new Object[2];
_obj[0] = System.currentTimeMillis();
_obj[1] = null;
jdbctemplet.update(strSql,_obj);

kingbug 2007-07-20
  • 打赏
  • 举报
回复
那个字段你要插入个NULL?
在映射值的时候用sql包里面的NULL常量
shuai45 2007-07-20
  • 打赏
  • 举报
回复
从错误情况来看 貌似sql的问题.
我想问题如下:
1 insert into table ( filed1,filed2) values ('1184841010859','null')
  filed2是int形的,而LZ插入的是string形的.所以出错.
2 filed2的字段设为不允许为空,而LZ插入的值的变量没得到,出错.
3我想知道 与filed2对应的值 是什么.就是你第二个占位符的值 ,我想问题出现在那
lzhs 2007-07-20
  • 打赏
  • 举报
回复
up
dinya2003 2007-07-20
  • 打赏
  • 举报
回复
不大懂, 期待java网友帮忙解决.
bewitchgirl 2007-07-20
  • 打赏
  • 举报
回复
up
bewitchgirl 2007-07-19
  • 打赏
  • 举报
回复

也不能挨个判断,因为从request里面取得的数据太多
大概代码都是
String one= request.getParameter(“”);
String two= request.getParameter(“”);
.
.
.
String hundred= request.getParameter(“”);
挨个判断如果是某个类型,就赋予该类型的值太复杂了阿
bewitchgirl 2007-07-19
  • 打赏
  • 举报
回复
不能设置成如果 NULL 就赋"" 因为字段类型可能是int这样的话就会抛出异常

自己没分了请 闭月羞花猫 帮发的
感谢他了

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧