存在即是合理的
Statement 比 PreparedStatement 的好处在什么地方?
Statement 比 PreparedStatement 的好处在什么地方?
解决方案 »
- jxl读excel文件出错,jxl.read.biff.BiffException: Unable to recognize OLE stream
- java新手求教 instanceof 的用法。
- 一道笔试题,麻烦大家看哈!
- 在线等,满意立即给分,java与windows
- 学JSP要学多久
- javabean连接数据库的500号问题
- java中的方法可以用输出参数吗?怎么用?
- ***捡分小问题--BufferedReader 如何实现读下一行?
- 请高手指教,关于JAVA+SQL的问题
- J2SE SDK 1.4.0 正式发布,心情愉快,散分!!!
- 指针式钟表表盘上添加一个文本框,文本框显示电子时间
- 请教键盘监听器的问题
PrepareStatement中执行的SQL语句中是可以带参数的,而Statement则不可以
eg:ps=conn.preparedStatement("select * from tb where name=? and password=?");
至于好处嘛你学了ORACLE就能了解更透彻些。
如果用statement 那么如果你的sql语句有错误可以通过调试看到完整的sql语句,放到数据库的命令行里就运行下就知道对不对了
这点在sql语句很长的时候很管用,但是用PrepareStatement却看不到完整的命令行,也就无法知道sql哪里错了。
如果没有强行要求一般都用statement如果你见到100来行的sql语句你会庆幸statement真是太好了
不管在什么情况下,都优先使用preparedStatement
当然,最好的,还是CallableStatement
这是性能的问题
在Web开发中,面对的是很多用户的访问
最好不要用普通的语句对象
大批量操作的话,执行效率会高点(理论上如此)
PreparedStatement预编译sql,可以在未知的地方以?的形式给出参数,然后在下面以set的形式设置参数,类似c#中的{}占位符..
大批量操作的时候执行效率会高点.. 但是PreparedStatement的话你是无法看到sql的完整句的. 所以有的时候也给调试带来一些麻烦.. 当你不需要参数的时候可以使用Statement,
因为
PreparedStatement是预先编译的,一次编译多次执行,而Statement则不是预先编译的,每次请求都得编译。
PrepareStatement中执行的SQL语句中是可以带参数的,有占位符的,而Statement则不可以。但是非批处理的情况下,是使用Statement。Statement接口更丰富些。
因为
PreparedStatement是预先编译的,一次编译多次执行,而Statement则不是预先编译的,每次请求都得编译。
PrepareStatement中执行的SQL语句中是可以带参数的,有占位符的,而Statement则不可以。 但是非批处理的情况下,是使用Statement。Statement接口更丰富些。
具体的使用方法也不相同!
要看使用者怎么去使用,
一般建议用PreparedStatement,
个人建议
一遍,再填充参数,这样效率会高一些。JDK 文档说:SQL 语句被预编译并且存储在 PreparedStatement 对象中,其后可以
使用该对象高效地多次执行该语句。2,代码可读性:Statement 中 SQL 语句中需要 Java 中的变量,加就得进行字符串的运算,还需要考虑一些引号、单引号的问
题,参数变量越多,代码就越难看,而且会被单引号、双引号搞疯掉;而 PreparedStatement,则不需要这样,参数可以采
用“?”占位符代替,接下来再进行参数的填充,这样利于代码的可读性,并且符合面向对象的思想。3,安全性:Statement 由于可能需要采取字符串与变量的拼接,很容易进行 SQL 注入攻击,而 PreparedStatement 由于是预
编译,再填充参数的,不存在 SQL 注入问题。
我问的是 Statement 比 PreparedStatement 的好处在什么地方?而不是 PreparedStatement 的好处啊
Statement 没有好处,PreparedStatement 是 Statement 的子类,Statement 拥有的好处 PreparedStatement 都拥有。
当你的sql是变化的,或者不确定的情况下,就尽量不要用PreparedStatement,用了也达不到预期的效果,因为你的sql是不断变化的,反而增加了数据库的负担。例如:select * from table_1 where aa='b' and ddd='c';执行完后,另一个人调用其方法执行另一条sql:select * from table_2 where ccc='bbb';
这样同一个方法中每次执行的sql都不一样的时候,就尽量用Statement,执行一次就可以了,不需要把sql预编译缓存到数据库中。如果你每执行一次预编译后缓存到数据库中,那么sql不同,有可能每次都是变的,反而增加了数据库的负担。
PreparedStatement 的预编译是为了提高效率,先把sql在数据库中编译或翻译好,然后每次执行的时候就直接利用。这样的用法最好在sql不经常改变的情况下使用。例如:insert 语句。