0

我有一个 Web 服务方法来比较模板,但是它不执行在 try catch 块中找到的 if else 语句中的代码,而是返回最后一个显示“错误”的返回语句。知道做错了什么吗?它应该返回“手指已验证”或“手指未验证”。

  @WebMethod(operationName = "verify")
public String verify(@WebParam(name = "name") String name, @WebParam(name = "ftset") String ftset) {
    Connection con = null;
    String dbTemplate = null;
    try {
        Class.forName("com.mysql.jdbc.Driver");
        con = DriverManager.getConnection("jdbc:mysql://localhost:3306/biodb", "root", "1234");
        PreparedStatement st;
        st = con.prepareStatement("select template from info where name = ? ");
        st.setString(1, name);

        ResultSet result = st.executeQuery();

        if (result.next()) { //.next() returns true if there is a next row returned by the query.

            dbTemplate = result.getString("template");

    byte[] byteArray = new byte[1];
    byteArray = hexStringToByteArray(dbTemplate);
    DPFPTemplate template = DPFPGlobal.getTemplateFactory().createTemplate();
    template.deserialize(byteArray);


    byte[] fsArray = new byte[1];
    fsArray = hexStringToByteArray(ftset);
    DPFPFeatureSet features = null;
    features.deserialize(fsArray);

    DPFPVerification matcher = DPFPGlobal.getVerificationFactory().createVerification();
    DPFPVerificationResult fresult = matcher.verify(features, template);

    if (fresult.isVerified()) {

        return "The fingerprint was VERIFIED.";

    } else {
        return "The fingerprint was NOT VERIFIED.";

    }

        }
    } catch (Exception e) {
        System.out.println(e.getMessage());

    } finally {
        if (con != null) {
            try {
                con.close();

            } catch (SQLException e) {
            }
        }
    }

      return "error";
}
4

1 回答 1

0

知道做错了什么吗?

好吧,您所描述的行为是如果抛出异常会发生什么,因为:

catch (Exception e) {
    System.out.println(e.getMessage());
} 

如果出现任何问题,你写一些东西System.out(大概你没有看,否则你会看到发生了什么)并通过返回“错误”继续。

首先,我建议捕获特定异常 - 并更改记录异常的方式,以便在诊断中更加明显。

此外,如果result.next()返回,您将获得此行为false。由于缺乏一致的缩进,这从您发布的代码中不清楚。您绝对应该修复缩进 - 可读性绝对至关重要。

接下来,计算出您想要在result.next()返回时发生的情况false。这是一个错误吗?它实际上应该只返回“未验证”的情况吗?

于 2012-11-08T11:58:36.457 回答