SQL Server 2005 + Java '@P0' 附近有语法错误
.
.
.
.
.
今天写了一个这样的分页查询:
1 SELECT
2 TOP ? *
3 FROM
4 [Goods]
5 WHERE
6 id NOT IN (
7 SELECT
8 TOP (? * (? - 1)) id
9 FROM
10 [Goods]
11 ORDER BY
12 id
13 )
14 ORDER BY
15 id
可是执行之后总是报“'@P0' 附近有语法错误”错误,十分郁闷。
刚开始以为是没有获得到参数,可是跟踪了几次之后发现一切执行都正常。
后来才发现,不知道是 SQL Server 不支持在 SQL 语句的 top 后面使用 "?" 占位符还是 Java 不支持在 SQL 语句的 top 后面使用 "?" 占位符。
总之改为如下方式就可以了:(也就是字符串拼接的方式)
1 String sql = " SELECT TOP " + pageIndex + " * FROM [Goods] WHERE [id] NOT IN (SELECT TOP (? * (? - 1)) [id] FROM [Goods] ORDER BY [id])"
2 + " ORDER BY [id]"
但是这样做就会带来安全性问题(主要是 SQL 注入的问题),所以建议改用存储过程来保障程序的安全性。
作者:dybai
出自:https://0xcafebabe.cnblogs.com
赞赏:3Ky9q5HVGpYseBPAUTvbJBvM3h3FQ3edqr(BTC)
本作品采用知识共享署名-相同方式共享 3.0 中国大陆许可协议进行许可。
欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
posted on 2012-01-13 22:42 0xCAFEBABE 阅读(2283) 评论(0) 编辑 收藏 举报