3

当我运行此查询时:

select character from tbl_Unknown where format(fw,'.###')='48.143' and code='0001'

它在 Access 查询界面中返回结果,但是当我尝试从 Java 运行它时,它不返回结果。

我的表(tbl_Unknown):

char_id: autonumber   value:1
fw: short text        value:'48.1425'   Hint:after format it become '48.143'.
code: short text      value:'0001' 
character: short text value: 'x'

我的java代码:

public static String getLostedCharacter(String font,String fw, String code) {
      Connection conn = ConnectDB.getConnection();
      String character = null;
       try {
        Statement statement = conn.createStatement();
        String query = "select character from tbl_"+font+" where format(fw,'.###')='"+fw+"' and code='" + code + "'";
        ResultSet rs = statement.executeQuery(query);
         while (rs.next()) {
            character = rs.getString(1);
            return character;
        }
        statement.close();
        rs.close();
    } catch (SQLException ex) {
        return "";
    }
    return "";   
} 
4

2 回答 2

2

从 Access 应用程序本身运行的 Access SQL 查询可以使用各种 VBA 函数,这些函数在从其他应用程序运行的 Access SQL 查询中可能不可用(或行为可能略有不同)。

作为一种解决方法,我建议这样做:

String query = String.format(
        "select character from tbl_%s " +
        "where Trunc((Val(fw)*1000)+0.5)=? and code=?", 
        font);
PreparedStatement ps = conn.prepareStatement(query);
ps.setInt(1, (int)(1000 * Double.parseDouble(fw)));  // e.g. 48143
ps.setString(2, code);
ResultSet rs = ps.executeQuery();

编辑回复:评论

正如jamadei 所解释的,Format()UCanAccess 版本 <= 2.0.6.2 中实现的功能产生的结果与此特定情况下的 Access/VBA 实现略有不同。特别是在 Access 查询中Format(48.1425,".###)返回,48.143但它48.142在 UCanAccess 查询中返回。这可能会在 UCanAccess 的未来版本中得到纠正。这已在 UCanAccess 2.0.6.3 中得到纠正。

于 2014-06-01T11:12:22.843 回答
1

提到的两个问题(int 函数和格式函数中的舍入模式“half up”)已在 2.0.6.3 中修复。

于 2014-06-13T23:22:06.940 回答