2017-09-27 184 views
-1

我正在创建应用程序,我需要调用SQL过程。如何解决“从字符串转换为uniqueidentifier时转换失败”?

我得到错误的参数是最后一个,即第十五个参数,contactID ..前五个参数也是唯一标识符,但它们设置正确..只有最后一个,contactID在尝试设置时抛出异常它作为程序参数。

这里是我的Java代码:

@SuppressWarnings({ "unchecked", "null" }) 
    @Override 
    public JSONObject saveProductData(ProductsDataToSaveDTO ProductsDataToSaveDTO) throws SQLException { 
     String output = ""; 
     Connection conn = null; 
     Statement sta = null; 
     String errorClassAndMethod = getErrorContainingClassAndMethod(); 
     JSONObject jsonOutput = new JSONObject(); 
     try { 
      Gson gson = new GsonBuilder().create(); 
      String json = gson.toJson(ProductsDataToSaveDTO); 
      org.json.JSONObject jsonInput = new org.json.JSONObject(json); 
      conn = createConnection(jsonInput); 
      sta = conn.createStatement(); 

      String SPsql = "{call SP_InsertUpdateAdvisoryBoxProductDetails (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}"; 
      PreparedStatement ps = conn.prepareStatement(SPsql); 
      System.out.println(jsonInput); 
      org.json.JSONArray productsList = (org.json.JSONArray) jsonInput.get("productsList"); 

       ps.setString(1, ProductsDataToSaveDTO.getClientId()); 
       ps.setString(2, ProductsDataToSaveDTO.getDivisionId()); 
       ps.setString(3, ProductsDataToSaveDTO.getClientRoleId()); 
       ps.setString(4, ProductsDataToSaveDTO.getUserID()); 
       ps.setString(5, ProductsDataToSaveDTO.getUserLoginDetailId()); 

       for (ProductsList productsListBO : ProductsDataToSaveDTO.getProductsList()) { 

        if (productsListBO.getProductCategory().equalsIgnoreCase("AOV")) { 

        ps.setString(6, productsListBO.getProductSituation()); 
        String output2 = productsListBO.getProductSituation(); 
        ps.setString(7, productsListBO.getProductCategory()); 
        ps.setString(8, productsListBO.getProductSubcategory()); 
        ps.setString(9, productsListBO.getProviderName()); 
        ps.setString(10, productsListBO.getProductName()); 
        ps.setString(11, productsListBO.getServiceProvider()); 
        ps.setString(12, productsListBO.getPolicyNumber()); 
        ps.setString(13,productsListBO.getProductClosed()); 
        ps.setString(14, productsListBO.getNameFirstInsured()); 
        ps.setString(15, productsListBO.getContactID()); 
        } 
        ResultSet rs = ps.executeQuery(); 
        while (rs.next()) { 
         output = rs.getString(1); 
         jsonOutput.put("status", output); 
        } 
       } 
     } catch (Exception e) { 
      output = e.toString(); 
      e.printStackTrace(); 
      String errorMessageAndClassWithMethod = getErrorContainingClassAndMethod(); 
      throw new SpringAppRuntimeException(errorMessageAndClassWithMethod + e.toString()); 
     } finally { 
      if (sta != null) { 
       conn.close(); 
      } 
      if (conn != null) { 
       conn.close(); 
      } 
     } 
     return jsonOutput; 
    } 

,当我跑我的服务,我得到的错误作为,发生 “应用程序运行时异常[中ClassName.saveProductData错误:com.microsoft.sqlserver .jdbc.SQLServerException:转换从字符串转换为uniqueidentifier时失败]”

我应该做的代码什么样的改变才能成功运行它。?

+0

对于哪个变量它给出的错误。 – Optional

+0

嗨,它设置此参数时抛出异常: “ps.setString(15,productsListBO.getContactID());” –

回答

1

所以根据您的意见,我将它作为答案

1)ps.setString(15, productsListBO.getContactID());"

2)检查你的程序的第15届说法SP_InsertUpdateAdvisoryBoxProductDetails@ProductSituation NVARCHAR(10)

3)是一个真正的标识符字段并且varchar是否与contactID的长度相匹配?改变那10说100并且测试。

4)我也认为你在参数中设置值的顺序(基于方法名)以及你的过程参数的顺序是不同的。通过它并纠正以及

+0

根据您的建议做了很少的改变,它的工作..谢谢。 –

相关问题