【问题标题】:JDBC SQL Server join not returning any resultsJDBC SQL Server 连接不返回任何结果
【发布时间】:2015-07-25 23:29:48
【问题描述】:

我正在将当前在 MYSQL 下运行的应用程序转换为使用 SQL Server。结果是,我遇到了一个奇怪的情况!现有查询通过 JDBC 在 MySQL 中工作,并在 MySQL 中作为命令行查询工作——然而,相同的查询不能通过 SQL Server JDBC 驱动程序工作,尽管在 SQL Server 工作室中从命令行作为查询工作。

在 MYSQL JDBC 下我得到一组结果,在 SQL Server JDBC 下我得到 0 个结果。

我已经尝试过这种查询方式(在 SQL Server 中可以从命令行运行)

SELECT DISTINCT
    x,
    y
FROM
    table1,
    table2
WHERE
    x = y
AND start_date <= '2015-05-15'
AND end_date >= '2015-05-15'
AND direction LIKE 'Direction';

JDBC 内部是这样的:

"select DISTINCT x, y from table1, table2" +
                        "WHERE x=y and start_date <= ? and end_date >= ? and direction like ?"

【问题讨论】:

  • 可能没有关于加入条件的匹配数据?
  • 我检查了MYSQL和SQL Server中的数据,两者在结构和内容上都是相同的。 MYSQL版本返回2行,SQL Server返回0行。
  • 您与同一个用户连接到同一个数据库?是否记录了任何错误?
  • @DaveHowes 就是这样,戴夫。没有记录错误:它是一个本地测试数据库。我所拥有的只是不正确的结果。我一直在检查数据库是否通过日志连接。我注意到最后一个 OR 可以从命令行中删除,并且 SQL 客户端返回正确的结果集。但是,明智的 JDBC,我仍然没有得到任何回报,只是一个空集。这是一个更大的应用程序的一部分,我主要可以通过连接到 SQL Server 来完成它:因此,它不太可能是用户/混合连接问题。
  • 你能贴出 select 语句周围的代码,以便我们在上下文中看到它吗?

标签: java mysql sql-server jdbc


【解决方案1】:

答案是 SQL Server 需要用 % % 分隔的“like”。如本例所示:

Using "like" wildcard in prepared statement

我们的代码在 MySQL 驱动程序上运行良好,但驱动程序在这方面明显不同。我已经简化了帖子,以防其他人遇到此问题并找到此帖子。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多