首页 > 试题广场 >

关于JDBC PreparedStatement,下面说法错

[单选题]
关于JDBC PreparedStatement,下面说法错误的是()?
  • 可以用来进行动态查询
  • 通过预编译和缓存机制提升了执行的效率
  • 不能直接用它来执行in条件语句,但可以动态生成PreparedStatement,一样
    能享受PreparedStatement缓冲带来的好处
  • 有助于防止SQL注入,因为它会自动对特殊字符转义
JDBC是Java实现数据库访问的应用程序编程接口。
发表于 2020-03-28 12:22:05 回复(0)
PreparedStatement的一个缺点是,我们不能直接用它来执行in条件语句;需要执行IN条件语句的话,下面有一些解决方案:
  • 分别进行单条查询——这样做性能很差,不推荐。
  • 使用存储过程——这取决于数据库的实现,不是所有数据库都支持。
  • 动态生成PreparedStatement——这是个好办法,但是不能享受PreparedStatement的缓存带来的好处了。
  • 在PreparedStatement查询中使用NULL值——如果你知道输入变量的最大个数的话,这是个不错的办法,扩展一下还可以支持无限参数。
发表于 2017-09-26 00:23:46 回复(0)
<p>三短一长选最长</p>
发表于 2020-09-17 23:06:06 回复(3)
这个真心不知道
发表于 2018-11-28 17:40:18 回复(0)
动态查询的意思是,先会为sql语句进行预编译,然后明确格式,动态的将参数赋值到❓上边
编辑于 2024-03-02 06:03:59 回复(0)
C,前半句正确,后半句不知道哪里出错。动态生成的PrepareStatement不能享受PrepareStatement缓冲带来的好处?
发表于 2022-11-17 10:14:39 回复(0)
答案:C
A:正确。动态查询是指:在执行 sql 语句之前,将 sql 语句进行提前编译。明确 sql 语句的格式,剩余的内容都会认为是参
数,sql 语句中的参数使用 ? 作为占位符。预编译之后再为占位符赋值,即为动态添加参数,动态查询
B:正确。预编译见A解释,缓存机制不知道是什么意思,懂的可以留言。
C:错误。前半句正确,后半句目前不知道哪错了。
D:正确。可以防止SQL注入,但是我认为原因是:sql语句是预编译的,而且语句中使用了占位符,规定了sql语句的结构。用户可以设置"?"的值,但是不能改变sql语句的结构,因此想在sql语句后面加上如“or 1=1”实现sql注入是行不通的。

补充:prepareStatement有个批量查询in的博客参考。
https://blog.csdn.net/suifeng3051/article/details/24033237

编辑于 2022-02-10 14:58:24 回复(0)
防止SQL注入不是通过预编译实现的吗

发表于 2021-08-21 16:23:55 回复(0)
没人解释清楚吗
发表于 2020-08-12 20:38:26 回复(0)
b
发表于 2018-01-12 22:53:47 回复(0)
D
发表于 2017-12-22 01:08:34 回复(0)
D
发表于 2017-10-18 00:14:29 回复(0)
c
发表于 2017-08-23 22:56:39 回复(0)