我的MessageDAOImpl类里面有这样一个方法:
public List<Message> findAllMessage(Page page) {
Connection connection = DBConnection.getConnection();
String sqlStr = "select top ? * from tb_message where " +
        "messageID not in (select top ? messageID from tb_message) " +
        "order by publishTime desc";
PreparedStatement ps = null;
ResultSet rs = null;
List<Message> messages = new ArrayList<Message>();

try{
ps = connection.prepareStatement(sqlStr);
ps.setInt(1,page.getEveryPage());
ps.setInt(2,page.getBeginIndex());
System.out.println("每页信息的条数:"+page.getEveryPage());
System.out.println("开始查信息的索引:"+page.getBeginIndex());
System.out.println("分页查询信息的语句:"+sqlStr);
rs = ps.executeQuery();
while(rs.next()){
Message message = new Message();
message.setMessageID(rs.getInt("messageID"));
message.setMessageTitle(rs.getString("messageTitle"));
message.setMessageContent(rs.getString("messageContent"));
message.setEmployeeID(rs.getInt("employeeID"));
message.setPublishTime(rs.getDate("publishTime"));
messages.add(message);
}
}catch(SQLException se){
se.printStackTrace();
}finally{
DBConnection.close(rs);
DBConnection.close(ps);
DBConnection.close(connection);
}

return messages;
}
是用来分页查找tb_messge表中的信息的,但是运行的时候却抛出了异常:
com.microsoft.sqlserver.jdbc.SQLServerException: '@P0' 附近有语法错误。
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(Unknown Source)
at com.microsoft.sqlserver.jdbc.IOBuffer.processPackets(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.getPrepExecResponse(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PreparedStatementExecutionRequest.executeStatement(Unknown Source)
at com.microsoft.sqlserver.jdbc.CancelableRequest.execute(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeRequest(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeQuery(Unknown Source)
at com.eams.daoImpl.MessageDAOImpl.findAllMessage(MessageDAOImpl.java:55)
at com.eams.test.MessageDAOImplTest.main(MessageDAOImplTest.java:15)大家帮我分析一下,这个异常信息是什么意思呀?

解决方案 »

  1.   

    select top ? * from tb_message
    这里好像不能用参数
    只能用++拼接字符串
      

  2.   

    select top ? * ps.setInt(1,page.getEveryPage());   这样不能给给?号赋值吧,直接拼进去。 
      

  3.   

    其实这种错误很明显 ,第一种是你sql语句语法有错。第二种是jdbc链接数据库有错。你可以把拼好的SQL 语句打出来然后在数据库中执行。这种方法比较实用!!楼主多多采用!
      

  4.   

    一楼你说对了,可否解释一下这里为什么不能用ps.setInt()方法赋值呢?