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);

解决方案 »

  1.   

    不能设置成如果 NULL 就赋"" 因为字段类型可能是int这样的话就会抛出异常自己没分了请 闭月羞花猫 帮发的
    感谢他了
      

  2.   


    也不能挨个判断,因为从request里面取得的数据太多
    大概代码都是
    String one= request.getParameter(“”);
    String two= request.getParameter(“”);
    .
    .
    .
    String hundred= request.getParameter(“”);
    挨个判断如果是某个类型,就赋予该类型的值太复杂了阿
      

  3.   

    不大懂, 期待java网友帮忙解决.
      

  4.   

    从错误情况来看 貌似sql的问题.
    我想问题如下:
    1 insert into table ( filed1,filed2) values ('1184841010859','null')
      filed2是int形的,而LZ插入的是string形的.所以出错.
    2 filed2的字段设为不允许为空,而LZ插入的值的变量没得到,出错.
    3我想知道 与filed2对应的值 是什么.就是你第二个占位符的值 ,我想问题出现在那
      

  5.   

    那个字段你要插入个NULL?
    在映射值的时候用sql包里面的NULL常量
      

  6.   

    汗~~~~~~~~~~~~~!可能我没表达清楚啊前台有些项目允许空
    但是后台取出的数值就是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);
      

  7.   

    如果filed2是string形的 如果 _obj[1] = null; 那定义一string形的空字符串
      

  8.   

    insert into table (filed1,filed2) values ('1184841010859',null)
    因为你用的是占位符,如果filed2是string形的 那其占位符必然也是string形的.
      

  9.   

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

  10.   

    insert into table ( filed1,filed2) values ('1184841010859','')这样不行啊!因为不知道filed2 是不是String啊!
    有可能是int类型的啊!
      

  11.   

    我的表达有问题啊。~~~~~~~~~~~不知道该怎么说了
    我在尝试这样表达一下我的问题!我的意思是: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'
      

  12.   

    简单说就是我怎么能用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)
      

  13.   

    table ( filed1,filed2)的表结构是什么?
      

  14.   

    //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);
    }
    }