【问题标题】:SQL query returns no result from Java although it returns a result in Access尽管 SQL 查询在 Access 中返回了结果,但它没有从 Java 中返回任何结果
【发布时间】:2014-07-21 14:03:53
【问题描述】:

当我运行这个查询时:

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 "";   
} 

【问题讨论】:

  • 我认为你有一个例外。请添加ex.printstacktrace()' in your catch` 块以查看发生了什么。
  • 没有异常就是不返回结果(没有找到匹配)
  • @user3649116 你怎么知道没有异常?你的 catch 块只有return "",这和你没有结果时做的完全一样。

标签: java sql ms-access jdbc ucanaccess


【解决方案1】:

从 Access 应用程序本身运行的 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();

编辑回复:cmets

正如jamadei 所解释的,在UCanAccess 版本Format() 函数产生的结果与针对这种特殊情况的Access/VBA 实现略有不同。具体来说,Format(48.1425,".###) 在 Access 查询中返回 48.143,但在 UCanAccess 查询中返回 48.142这可能会在 UCanAccess 的未来版本中更正。这已在 UCanAccess 2.0.6.3 中更正。

【讨论】:

  • 感谢您的努力,戈德先生,我会试试的
  • 我可以在 VBScript 和 Access 2007 的查询中使用 Format()。我不明白为什么它不能用于从 Java 或 .NET 运行的查询。
  • @HansUp 此人在其 Java 应用程序中使用 UCanAccess,而 Format() 在该配置下将无法工作。不过,你是对的:我应该调整答案的措辞。
  • 好的,我不明白 UCanAccess ...我希望它会向 Access db 引擎发送一个声明...但显然还有其他/更多的事情正在发生。显然UCanAccess 将Trunc() 翻译成Access 支持的东西……对吗?我可能应该避免使用这些 Java 东西,因为我不知道如何深蹲。 ;-)
  • @HansUp 是的,UCanAccess 显然支持Trunc(),但不支持Int()。我在发布之前测试我的代码时发现了这一点。 UCanAccess 使用Jackcess 来读取和写入Access 数据库。不涉及 ACE/Jet;它甚至可以在 Linux 和 Mac 上运行。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-18
    • 1970-01-01
    • 1970-01-01
    • 2011-04-11
    • 1970-01-01
    • 2013-12-04
    • 2014-05-02
    相关资源
    最近更新 更多