JAVA调用SQL server2005带参数的存储过程,如果参数中有汉字和空格或任何标点符号都会报异常,这是怎么回事参数中有汉字的:
String str="空闲";
call = conn.prepareCall("{call test('"+str1+"')}");
com.microsoft.sqlserver.jdbc.SQLServerException: 在此上下文中不允许使用名称 "空闲"。有效表达式包括常量、常量表达式和变量(在某些上下文中)。不允许使用列名。 参数中带空格的
String str="12   3";
call = conn.prepareCall("{call test('"+str1+"')}");
com.microsoft.sqlserver.jdbc.SQLServerException: '38' 附近有语法错误。
参数中只能是纯字母或者数字,不能有汉字和任何标点符号,怎么处理呢

解决方案 »

  1.   

    test参数是什么类型的?call test('"+str1+"')看你左右括号,一个英文的,一个中文的
      

  2.   

    终于有回复了
    括号是发贴时写错了,参数类型是varchar
    问题不知怎么解决呀
      

  3.   

    不建议这样传参标准的格式应该是
    CallableStatement  cstmt  =  con.prepareCall("{call  test(?)}");  
    cstmt.registerOutParameter(1,  java.sql.Types.字符串类型的);  
    cstmt.executeQuery();  
      

  4.   

    还是不行,str中包含汉字和空格都不行String str="空闲";
    call = conn.prepareCall("{call test('"+str1+"')}");
    com.microsoft.sqlserver.jdbc.SQLServerException: 在此上下文中不允许使用名称 "空闲"。有效表达式包括常量、常量表达式和变量(在某些上下文中)。不允许使用列名。
    参数中带空格的
    String str="12   3";
    call = conn.prepareCall("{call test('"+str1+"')}");
     
     
    com.microsoft.sqlserver.jdbc.SQLServerException: '38' 附近有语法错误。
      

  5.   

    这样写的话,参数str放哪里啊str放到哪啊
    call.registerOutParameter(1,java.sql.Types.NVARCHAR);