java连接sqlserver有关问题,相同语句在查询分析器中可以执行,在java中则报错

   阅读
java连接sqlserver问题,相同语句在查询分析器中可以执行,在java中则报错
public List<Emp> findAll(String keyWord, int currentPage, int lineSize)throws Exception {
List<Emp> all = new ArrayList<Emp>();   
String sql =  "select top "+ lineSize +" e.empno,e.ename,e.job,e.hiredate,e.sal,e.comm,m.empno mno,m.ename mna" + 
  "from emp e LEFT OUTER JOIN emp m" +
  " ON e.mgr = m.empno" +
  "where (e.empno LIKE ? OR e.ename LIKE ? OR e.job LIKE ? OR CAST(e.hiredate AS datetime) LIKE ? OR " +
  "e.sal LIKE ? OR e.comm LIKE ? )"+
  "AND e.empno not in (select top " + (currentPage - 1) * lineSize + " empno from emp) ";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1,"%"+keyWord+"%") ;
pstmt.setString(2,"%"+keyWord+"%") ;
pstmt.setString(3,"%"+keyWord+"%") ;
pstmt.setString(4,"%"+keyWord+"%") ;
pstmt.setString(5,"%"+keyWord+"%") ;
pstmt.setString(6,"%"+keyWord+"%") ;
ResultSet re = this.pstmt.executeQuery();
while(re.next()){
Emp emp = new Emp();
emp.setEmpno(re.getInt(1));
emp.setEname(re.getString(2));
emp.setJob(re.getString(3));
emp.setHiredate(re.getDate(4));
emp.setSal(re.getDouble(5));
emp.setComm(re.getDouble(6));
Emp mgr = new Emp();
mgr.setEmpno(re.getInt(7));
mgr.setEname(re.getString(8));
emp.setMgr(mgr);
all.add(emp);
}
return all;
}



select top 3 e.empno,e.ename,e.job,e.hiredate,e.sal,e.comm,m.empno mno,m.ename mna
from emp e LEFT OUTER JOIN emp m
ON e.mgr = m.empno
where (e.empno LIKE '%%' OR e.ename LIKE '%%' OR e.job LIKE '%%' OR CAST(e.hiredate AS datetime) LIKE '%%' OR
e.sal LIKE '%%' OR e.comm LIKE '%%' )
AND e.empno not in (select top 0 empno from emp)


上面的java代码中,当运行的时候则会出现:'emp' 附近有语法错误。 
Exception in thread "main" com.microsoft.sqlserver.jdbc.SQLServerException: 'emp' 附近有语法错误。
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(Unknown Source)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeQuery(Unknown Source)
at jw.pro.dao.impl.EmpDAOImpl.findAll(EmpDAOImpl.java:176)
at jw.pro.dao.proxy.IEmpDAOProxy.findAll(IEmpDAOProxy.java:78)
at jw.pro.dao.proxy.IEmpDAOProxy.main(IEmpDAOProxy.java:90)

在sqlserver2005的查询分析器中则可以执行出结果,但是在java中则会报错,找了半天都没找到问题所在,求解。
------解决思路----------------------
字符串from和前面的字符串连一起了,在from前面加个空串
阅读