问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

preparedstatement用法是什么?

发布网友 发布时间:2022-04-23 07:12

我来回答

2个回答

懂视网 时间:2022-04-14 19:49

序言 对应PreparedStatement相信大家都很熟悉,那么为什么要用PreparedStatement呢?也许你会回答PreparedStatement为预处理语句,可以提高数据库执行效率。也许还会回答用PreparedStatement可以防止SQL注入。那么再问下,你觉得你对PreparedStatement有足够

序言

对应PreparedStatement相信大家都很熟悉,那么为什么要用PreparedStatement呢?也许你会回答PreparedStatement为预处理语句,可以提高数据库执行效率。也许还会回答用PreparedStatement可以防止SQL注入。那么再问下,你觉得你对PreparedStatement有足够的了解吗,你在项目中PreparedStatement用对了吗?

原理分析

首先来看下Statement及PreparedStatement执行过程,一个sql语句执行过程中,将经历这么几个步骤:

1、传输SQL给数据库

2、数据库验证并解析SQL

3、计算Access Plan。数据库会通过检测index,statistics来给出最优的访问计划。

4、根据访问计划进行检索,返回数据。

在上面步骤中,第3步是非常耗时的。因此,为了提高性能,数据库会缓存执行语句以及其Access Plan。这被称为statement cache。在statement cache中,sql语句本身为key,access plan为value。当相同的sql语句被发送过来时,数据库会使用缓存中的access plan以节省cpu时间。

下边看下Statement执行代码:

Statement statement = connection.createStatement();
String sql1="Select * from test where id=1";
String sql2="Select * from test where id=";
statement.execute(sql1);
statement.execute(sql1);
statement.execute(sql1);
statement.execute(sql2+"2");
statement.execute(sql2+"3");

sql1在第一次执行的时候,需要计算执行计划。但在第2和3次执行的时候,会使用缓存好的执行计划,因此后面的sql1不会再重新检验语法与计算执行计划,效率会比第一次高。

sql2却每次都在变化,在cache中,key为整个sql语句,所以每次sql2都无法命中cache,即使它仅仅参数不同,也必须重新检验语法与计算执行计划,效率自然就低下。

强大的数据库会在cache命中上做优化,但复杂的语句还是避免不了miss。

PreparedStatement的存在是为了避免sql2的劣势。看下面code。

String sql2="Select * from test where id=?";
PreparedStatement pstmt = connection.prepareStatement(sql2);
pstmt.setInt(1,2);
pstmt.executQuery();
pstmt.setInt(1,3);
pstmt.executQuery();

PreparedStatement在创建的时候,会将参数化的语句发送给数据库,进行语法检测和执行计划计算。Cache中的key将是参数化的语句。当后面preparedstatement在执行的时候,每次均会命中cache,使用已存在的access plan进行检索。

如何正确使用

PreparedStatement的生命周期跟Statement一样,在一个数据库连接connection范围内有效,所以说如果一次连接中对于同一个PreparedStatement处理多次(参数不同),那么用PreparedStatement是可以提高效率,但大多情景都是多次连接中处理同一个PreparedStatement,那么就算使用了PreparedStatement也不能提高效率,比较PreparedStatement的生命周期只在Connection中。那么如何正确的使用PreparedStatement呢?

其实不用紧张,告诉大家个好消息,J2EE服务器的连接池管理器已经实现了缓存的使用。J2EE服务器保持着连接池中每一个连接准备过的prepared statement列表。当我们在一个连接上调用preparedStatement时,应用服务器会检查这个statement是否曾经准备过。如果是,这个PreparedStatement会被返回给应用程序。如果否,调用会被转给JDBC驱动程序,然后将新生成的statement对象存入连接缓存。

如果项目未使用数据库连接池怎么办呢,这里只能告诉你,原理你已经很清楚了,自己实现吧。

热心网友 时间:2022-04-14 16:57

1、preparedstatement是预编译的statement,从效率、数据类型等方面来看一般均应优先使用preparedstatement,而不是原始的statement。

2、HashMap用的是哈希表,适用于在Map中插入、删除和定位元素;而Treemap用的是二叉排序树,适用于按自然顺序或自定义顺序遍历键。访问方式一样

3、实现好像是语言本身的事情,使用倒简单,假定父类为A,子类为B,则向上转型为Aa=newB();向下转型为Bb=(B)a(注意强制转化是有前提的,否则运行时出错)


举例:

string strsql = "select emp_id from employee where emp_id = ?";

preparedstatement pstmt = conn.preparestatement(strsql);

pstmt.setstring(1,"pma42628m");

解释:此时sql中的"?"的值就是”pma42628m“。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? 如何避免wps卡顿? 属鼠的男人找对象是属什么,属鼠的人和什么属相合 96年鼠的姻缘在哪年 属相相合年份运势提升 2024属鼠找对象属什么最佳 黑客攻击网站能报案吗 黑客攻击报案有用吗 为什么PrepareStatement可以防止sql注入 prepareCall和prepareStatement有什么区别 preparStatement和普通statement的区别? java中对数据库的操作Statement和PrepareStatement这两个方法有什么不... Statement与PrepareStatement区别 Preparestatement的意义,为什么要用它啊? Statement和PrepareStatement有什么区别? 红烧鸡翅中的制作方法步骤 原味红烧鸡翅中怎么做 红烧鸡翅怎样做更好吃 红烧鸡翅怎么做的? 红烧鸡翅应该怎么做法? 怎么能做好红烧鸡翅? 红烧鸡翅怎么做? 红烧鸡翅的制作方法? 郑州商业贷款可转住房公积金吗? 关于购房商贷转公积金贷款的问题谁能告诉我呀?谢谢 梦见自己的大人死了,放在棺材里准备埋 中信银行的贷款已经办好,可住房公基金刚下来,我想转为住房公基金还贷款,应怎么办,需要什么手续? 梦见棺材出殡埋葬正屋前面? java中对数据库操作时,prepareStatement的Statement区别是什么?_百度... prepareStatement为什么会空指针? statement和preparedsteament的区别 关于prepareStatement的问题 jdbc 中prepareStatement对sql中的占位符赋值问题 java为啥使用 preparestatement麻烦告诉我 浅谈JDBC 中 CreateStatement 和 PrepareStatement 的区别与优劣_百度... 提问prepareStatement怎么转成Mysql的语句? con.prepareStatement()执行之后如何清除sql 在PS里怎样把多张动图放在同一张里 就是一张图上有几张GIF 怎样用PHOTOSHOP将多张GIF格式的动态图片合成一张? 在ps中如何把两张gif图合并? 怎么用PS把两张GIF融在一起 怎么用PS把两个GIF图像合并 用PS如何合并两个gif动画 如何用ps合并多个gif 怎么把两张以上的GIF左右拼接在一起,不是融在一起。用PS或者其他。 我想用Photoshop和ImageReady把两张GIF动画合在一起,具体应该怎么做呢?? 屏幕使用时间设定什么意思 建设手机银行自己给自己转账怎么转