Java 如何解决;从字符串转换为uniqueidentifier“时转换失败?”;?

Java 如何解决;从字符串转换为uniqueidentifier“时转换失败?”;?,java,sql-server,stored-procedures,logic,Java,Sql Server,Stored Procedures,Logic,我正在创建需要调用SQL过程的应用程序 我得到错误的参数是最后一个,即第十五个参数contactID。。前五个参数也是唯一标识符,但设置正确。只有最后一个参数,即contactID,在尝试将其设置为过程参数时引发异常。 以下是我的Java代码: @SuppressWarnings({ "unchecked", "null" }) @Override public JSONObject saveProductData(ProductsDataToSaveDTO ProductsDa

我正在创建需要调用SQL过程的应用程序

我得到错误的参数是最后一个,即第十五个参数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时转换失败。]”


我应该对代码进行哪些更改才能成功运行它?

因此,根据您的评论,我将其添加为答案

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

2) 检查过程的第15个参数
SP_InsertUpdateAdvisoryBoxProductDetails
@productsition NVARCHAR(10)

3) 这真的是一个标识符字段吗?varchar是否与contactID的长度相匹配?将10改为100,然后进行测试


4) 我还认为,您在参数中设置值的顺序(基于方法名称)和过程获取参数的顺序是不同的。请仔细检查并更正它给出错误的变量。

。您好,设置此参数时会引发异常:“ps.setString(15,productsListBO.getContactID());“按照你的建议做了一些改动,效果很好……谢谢。