带有通配符的Prepared语句不返回某些行,但查询返回所有行?

时间:2011-09-06 14:49:05

标签: java sql sql-server sql-server-2008 jdbc

我正在使用JTDS作为连接SQL服务器的驱动程序。

这是给我问题的查询:

SELECT EmpID,FirstName,LastName,CompanyName,DepartmentName,JobTitle,HireDate FROM Employees where UPPER(FirstName) LIKE 'KEVIN%'

它在SQL Server上返回2行。其中一个有'KEVIN'大写,另一个有'Kevin'就是这样。我使用通配符来确保我得到两个结果。在我的EmployeeDAO课程中,我使用以下内容:

        ps = con.prepareStatement("SELECT EmpID,FirstName,LastName,CompanyName,"
                + "DepartmentName,JobTitle,HireDate FROM Employees WHERE UPPER(FirstName) LIKE ?");
        ps.setString(1, FirstName + "%");
        rs = ps.executeQuery();

然后我当然把KEVIN放在我的主力上。它只返回一行,即'Kevin'行。

如何解决此问题,以便返回所有行?

2 个答案:

答案 0 :(得分:0)

SQL Server安装的默认排序规则为SQL_Latin1_General_CP1_CI_AS,并且不区分大小写。

更改查询的排序规则:

SELECT Col1
FROM Table1
WHERE Col1 COLLATE Latin1_General_CS_AS LIKE 'KEVIN%'

答案 1 :(得分:0)

您的查询看起来很好(尽管我会在设置之前将参数值设置为大写,以使其更加健壮)。问题就在于你如何从ResultSet收集行。可能你会明显地覆盖前一行和下一行,这样你的集合中最后只有一行(最后一行)。