日期:2014-05-20  浏览次数:20851 次

求高手给个sql语句书写
public Employee FindEmployee(String userName, Connection conn)
throws MyException {
Employee emp = null;
String sql = "select * from Employee where UserName = ?";
try {
ps = conn.prepareStatement(sql);
ps.setString(1, userName);
rs = ps.executeQuery();
while (rs.next()) {
emp = new Employee();
emp.setEmployeeNo(rs.getString("EmployeeNo"));
emp.setUserName(rs.getString("UserName"));
emp.setPassWord(rs.getString("PassWord"));
emp.setRoleID(rs.getString("RoleID"));
emp.setName(rs.getString("Name"));
emp.setIDNumber(rs.getString("IDNumber"));
emp.setBirthday(rs.getDate("Birthday"));
emp.setGender(rs.getString("Gender"));
emp.setStatus(rs.getString("Status"));
emp.setDepartmentID(rs.getString("DepartmentID"));
emp.setEmployeeFrom(rs.getDate("EmployeeFrom"));
emp.setEmployeeTo(rs.getDate("EmployeeTo"));

}
} catch (SQLException e) {
throw new MyException("通过用户名查找用户失败", e);
} finally {
DBUtil.close(rs);
DBUtil.close(ps);
}
return emp;
}
这个方法是通过用户名查询对象,假如我需要通过身份证号IDNumber查询对象或者其他字段查询,写一个通用的方法,我是这样写的,但是领导说sql语句不能采用拼接的方式,我无语了。。。如果传入2个问号,那第一个问号代表类型,那最后的sql语句将变成select * from Employee where “type”=?最后查询失败,不能用StringBulider进行拼接,求高手给个解决方法。
public Employee FindEmployee(String type,String value, Connection conn)
throws MyException {
Employee emp = null;
String sql = "select * from Employee where" +type+"= ?";
//............
}

------解决方案--------------------
可以用String.format吗?
for example
Java code
public Employee FindEmployee(String filedName, String fieldValue, Connection conn)
String sql = String.format("select * from Employee where %s = ?", fieldName);
ps = conn.prepareStatement(sql);
ps.setString(1, fieldValue);
rs = ps.executeQuery();

------解决方案--------------------
没,我看你最开始说的是这个效果吧:
String sql = "select * from Employee where UserName = ?";
try {
ps = conn.prepareStatement(sql);
ps.setString(1, userName);
这个才不算是拼接。

其它什么字符串直接++、StringBuffer、format啥都,都算是拼接,所以:
String sql = "select * from Employee where " +type+" = ?"; 这个必然算拼接。

不过我认为你可以跟你老板探讨下,消除拼接的目的是什么;如果非不用拼接的话,如何实现通用性。我三楼主要探讨的内容是这个。