Java 带通配符的Prepared语句不返回某些行,但查询返回所有行?
我正在使用JTDS作为连接到SQL server的驱动程序 以下是给我带来问题的查询:Java 带通配符的Prepared语句不返回某些行,但查询返回所有行?,java,sql,sql-server,sql-server-2008,jdbc,Java,Sql,Sql Server,Sql Server 2008,Jdbc,我正在使用JTDS作为连接到SQL server的驱动程序 以下是给我带来问题的查询: SELECT EmpID,FirstName,LastName,CompanyName,DepartmentName,JobTitle,HireDate FROM Employees where UPPER(FirstName) LIKE 'KEVIN%' 它在SQL Server上返回2行。一个大写字母为“KEVIN”,另一个大写字母为“KEVIN”。我使用通配符来确保两个结果都得到。在我的Employe
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”行
如何修复此问题,使其返回所有行?SQL Server安装的默认排序规则为SQL\u拉丁1\u常规\u CP1\u CI\u AS,不区分大小写 更改查询的排序规则:
SELECT Col1
FROM Table1
WHERE Col1 COLLATE Latin1_General_CS_AS LIKE 'KEVIN%'
您的查询看起来不错,不过我会在设置参数值之前将其大写,以使其更健壮。问题在于如何从结果集中收集行。很可能您只是简单地用下一行覆盖上一行,这样您就只能得到集合中最后一行。您是如何从ResultSet中收集行的?问题很可能就在这里。您是否尝试过:选择EmpID、FirstName、LastName、CompanyName、DepartmentName、JobTitle、HireDate,这些名称都来自于像上面的“KEVIN%”这样的雇员。下一步{v.addnew Employeers.getIntEmpID、rs.getStringFirstName、rs.getStringLastName、rs.getStringCompanyName、rs.getStringDepartmentName、rs.getStringJobTitle、rs.getStringHireDate;}RS是结果集,v是向量顺便问一下,你有没有试过ps.setString,“+FirstName+%”和quoteYea,考虑到jdbc为我们处理单引号和转义,这应该不会有什么区别你是对的,但我收集的行很好。我是在显示中出错的。如果有什么问题,可以称之为大脑放屁,但我运行了一个for循环并在1处启动了计数器变量。再次感谢。遗憾的是,由于某些原因,我正在开发的SQL Server实际上是区分大小写的,因为我的查询不返回大写值,这就是为什么我必须这样做的原因。