String sql = "select top ? * from t_user where user_id not in (select top ? user_id from t_user)";
...
pstmt.setInt(1, pageSize);
pstmt.setInt(2, pageSize * (pageNo - 1));
抛出了 com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near '@P0'.异常

解决方案 »

  1.   

    预编译好像不能放在top ?中使用
      

  2.   

    你这top ?的形式 PrepareStatement是不支持的,还是采用字符串拼接的方法来做吧
      

  3.   

    pageSize 和 pageNo 是不是没有取到值呀 ?或者其他的数据库操作出现问题 
      

  4.   

    根据debug调试了 pageSize 和 pageNo 确实取到了值
    用字符串拼接确实可以,我只想用预编译来试下,也许top ?在预编译里真的不起作用
      

  5.   

    数据库是mysql吗?mysql好像不能用top,好像是limit吧、
      

  6.   

    使用sqlserver的行号函数
    ROW_NUMBER ( )     OVER ( [ <partition_by_clause> ] <order_by_clause> )
    把他转义(as rownum)
    条件定为 rownum<?
      

  7.   

    .
    top后面的问号用小括号包起来
    select top (?) * from t_user
      

  8.   

    sqlserver可以用top,mysql用limit 
      

  9.   

    com.microsoft.sqlserver.jdbc.SQLServerException 这驱动明显不是mysql
    从来没用过top 不发表意见
      

  10.   

    应该是top不支持预编译
    用StringBuffer拼
    StringBuffer buffer=new StringBuffer("select top").append.(参数1).append.(.....)
      

  11.   

    我按照楼上的那位大哥的做法试了下,确实可以这样使用
    select top (?) * from t_user where user_id not in (select top(?)user_id from t_user)";
     
    在此谢过