当我运行此查询时:
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 "";
}
答案 0 :(得分:2)
从Access应用程序本身中访问运行的SQL查询可以使用在运行的Access SQL查询中可能不可用(或可能表现略有不同)的各种VBA函数来自其他应用程序。
作为一种解决方法,我建议:
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所解释的,在UCanAccess版本< = 2.0.6.2中实现的Format()
函数产生的结果与此特定情况的Access / VBA实现略有不同。具体来说,Format(48.1425,".###)
会在Access查询中返回48.143
,但会在UCanAccess查询中返回48.142
。 这可能会在以后的UCanAccess版本中得到纠正。这已在UCanAccess 2.0.6.3中得到纠正。
答案 1 :(得分:1)
上述问题(int函数和舍入模式" half up"格式函数)都已在2.0.6.3中修复。