数据库PreparedStatement传参问题

nowave1024 2015-06-20 12:35:37
Select ID,Name,Content,PostTime,DeleteTime,Visible,Agree from List order by ID desc limit ? , 10
比如这个,用PreparedStatement给它传参的话就会变成
Select ID,Name,Content,PostTime,DeleteTime,Visible,Agree from List order by ID desc limit '0' , 10
但是真正的语法结构是
Select ID,Name,Content,PostTime,DeleteTime,Visible,Agree from List order by ID desc limit 0 , 10
即0没有单引号。
不想直接拼接字符串,担心会发生SQL注入。
那么PreparedStatement的传参可以没有单引号吗?
...全文
704 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
nowave1024 2015-06-27
  • 打赏
  • 举报
回复
用了 setint 解决了。
nowave1024 2015-06-21
  • 打赏
  • 举报
回复
第二种: String sql = "Select ID,Name,Content,PostTime,DeleteTime,Visible,Agree from List order by ID desc limit ? , 10"; ps=conn.prepareStatement(sql); ps.setString(1,String.valueOf((pageIndex-1)*10)); rs=ps.executeQuery(); 第一种成功,第二种失败。 第二种失败的原因是,经过prepareStatement传参以后它的句子是 Select ID,Name,Content,PostTime,DeleteTime,Visible,Agree from List order by ID desc limit '0' , 10 0多了个单引号,所以出现sql语法错误。
nowave1024 2015-06-21
  • 打赏
  • 举报
回复
额。这样说吧: 首先我需要的sql语句是这样的: Select ID,Name,Content,PostTime,DeleteTime,Visible,Agree from List order by ID desc limit 0 , 10 其中 0 可以随意改变。 我用了两种方法传参: 第一种: String sql = "Select ID,Name,Content,PostTime,DeleteTime,Visible,Agree from List order by ID desc limit " + String.valueOf((pageIndex-1)*10) + " , 10"; Statement stat = conn.createStatement(); rs = stat.executeQuery(sql);
专注or全面 2015-06-20
  • 打赏
  • 举报
回复
PreparedStatement传参的时候,在应用程序中已经指定了数据类型了的,你看看程序代码就知道了,另外PreparedStatement这种方式传参,不是你想象的拼sql那样的,那跟拼sql不一样,这个是sql之执行的过程中去获取参数,而不是执行一个拼凑出来的sql字符串

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧