当前位置: 首页 > news >正文

济南网站运营公司教育网站怎么做引导栏的

济南网站运营公司,教育网站怎么做引导栏的,有哪些可以接单做任务的网站,淮北招聘网不管是spring jdbc #xff0c;jdbctemplate#xff0c;mybatis#xff0c;hibernate#xff0c;具体最核心的东西还是JDBC#xff0c;可能长时间不接触会慢慢忘记。 一、概念 PreparedStatement是用来执行SQL查询语句的API之一#xff0c;Java提供了 Statement、Prepa…不管是spring jdbc jdbctemplatemybatishibernate具体最核心的东西还是JDBC可能长时间不接触会慢慢忘记。 一、概念 PreparedStatement是用来执行SQL查询语句的API之一Java提供了 Statement、PreparedStatement 和 CallableStatement三种方式来执行查询语句其中 Statement 用于通用查询 PreparedStatement 用于执行参数化查询而 CallableStatement则是用于存储过程。同时PreparedStatement还经常会在Java面试被提及譬如Statement与PreparedStatement的区别以及如何避免SQL注入式攻击这篇教程中我们会讨论为什么要用PreparedStatement使用PreparedStatement有什么样的优势PreparedStatement又是如何避免SQL注入攻击的 1.PreparedStatement PreparedStatement是java.sql包下面的一个接口用来执行SQL语句查询通过调用connection.preparedStatement(sql)方法可以获得PreparedStatment对象。数据库系统会对sql语句进行预编译处理如果JDBC驱动支持的话预处理语句将被预先编译好这条预编译的sql查询语句能在将来的查询中重用这样一来它比Statement对象生成的查询速度更快。 2.Statement 使用 Statement 对象。在对数据库只执行一次性存取的时侯用 Statement 对象进行处理。PreparedStatement 对象的开销比Statement大对于一次性操作并不会带来额外的好处。 二、深入理解statement 和prepareStatement 1、使用Statement而不是PreparedStatement对象 JDBC驱动的最佳化是基于使用的是什么功能. 选择PreparedStatement还是Statement取决于你要怎么使用它们. 对于只执行一次的SQL语句选择Statement是最好的. 相反, 如果SQL语句被多次执行选用PreparedStatement是最好的. PreparedStatement的第一次执行消耗是很高的. 它的性能体现在后面的重复执行. 例如, 假设我使用Employee ID, 使用prepared的方式来执行一个针对Employee表的查询. JDBC驱动会发送一个网络请求到数据解析和优化这个查询. 而执行时会产生另一个网络请求.在JDBC驱动中减少网络通讯是最终的目的. 如果我的程序在运行期间只需要一次请求, 那么就使用Statement. 对于Statement, 同一个查询只会产生一次网络到数据库的通讯. 对于使用PreparedStatement池的情况下, 本指导原则有点复杂. 当使用PreparedStatement池时, 如果一个查询很特殊, 并且不太会再次执行到, 那么可以使用Statement. 如果一个查询很少会被执行,但连接池中的Statement池可能被再次执行, 那么请使用PreparedStatement. 在不是Statement池的同样情况下, 请使用Statement. 2、使用PreparedStatement的Batch功能 Update大量的数据时, 先Prepare一个INSERT语句再多次的执行, 会导致很多次的网络连接. 要减少JDBC的调用次数改善性能, 你可以使用PreparedStatement的AddBatch()方法一次性发送多个查询给数据库. 例如, 让我们来比较一下下面的例子. ***为了区分 “Statement、PreparedStatement、PreparedStatement 批处理” 这三者之间的效率下面的示例执行过程都是在数据库表t1中插入1万条记录并记录出所需的时间(此时间与电脑硬件有关)。实验结果如下 1.使用Statement对象 用时31秒 2.预编译PreparedStatement 用时14秒 3.使用PreparedStatement 批处理 用时485毫秒*** ------------------------------------------------------- 1.使用Statement对象 使用范围当执行相似SQL(结构相同具体值不同)语句的次数比较少 优点语法简单 缺点采用硬编码效率低安全性较差。 原理硬编码每次执行时相似SQL都会进行编译 示例执行过程:public void exec(Connection conn){try {Long beginTime System.currentTimeMillis();conn.setAutoCommit(false);//设置手动提交Statement st conn.createStatement();for(int i0;i10000;i){String sqlinsert into t1(id) values (i);st.executeUpdate(sql);}Long endTime System.currentTimeMillis();System.out.println(Statement用时(endTime-beginTime)/1000秒);//计算时间st.close();conn.close();} catch (SQLException e) { e.printStackTrace();}} 执行时间Statement用时31秒 ---------------------------------------------------------------- 2.预编译PreparedStatement 使用范围当执行相似sql语句的次数比较多例如用户登陆对表频繁操作..语句一样只是具体的值不一样被称为动态SQL 优点语句只编译一次减少编译次数。提高了安全性阻止了SQL注入 缺点: 执行非相似SQL语句时速度较慢。 原理相似SQL只编译一次减少编译次数 事例执行过程:public void exec2(Connection conn){try {Long beginTime System.currentTimeMillis();conn.setAutoCommit(false);//手动提交PreparedStatement pst conn.prepareStatement(insert into t1(id) values (?));for(int i0;i10000;i){pst.setInt(1, i);pst.execute(); }conn.commit();Long endTime System.currentTimeMillis();System.out.println(Pst用时:(endTime-beginTime)秒);//计算时间pst.close();conn.close();} catch (SQLException e) { e.printStackTrace();}} 执行时间Pst用时:14秒 ------------------------------------------------------------------ 3.使用PreparedStatement 批处理 使用范围一次需要更新数据库表多条记录 优点减少和SQL引擎交互的次数再次提高效率,相似语句只编译一次减少编译次数。提高了安全性阻止了SQL注入 缺点: 原理批处理: 减少和SQL引擎交互的次数一次传递给SQL引擎多条SQL。 名词解释 PL/SQL引擎在oracle中执行pl/sql代码的引擎在执行中发现标准的sql会交给sql引擎进行处理。 SQL引擎执行标准sql的引擎。 事例执行过程: public void exec3(Connection conn){try {conn.setAutoCommit(false);Long beginTime System.currentTimeMillis();PreparedStatement pst conn.prepareStatement(insert into t1(id) values (?));for(int i1;i10000;i){ pst.setInt(1, i);pst.addBatch();//加入批处理进行打包if(i%10000){//可以设置不同的大小如501005001000等等pst.executeBatch();conn.commit();pst.clearBatch();}//end of if}//end of forpst.executeBatch();Long endTime System.currentTimeMillis();System.out.println(pstbatch用时(endTime-beginTime)毫秒);pst.close();conn.close();} catch (SQLException e) {e.printStackTrace();} } 执行时间pstbatch用时485毫秒代码转自http://blog.itpub.net/90618/viewspace-607949/ 三、区别 1.代码的可读性和可维护性. 虽然用PreparedStatement来代替Statement会使代码多出几行,但这样的代码无论从可读性还是可维护性上来说.都比直接用Statement的代码高很多档次: stmt.executeUpdate(“insert into tb_name (col1,col2,col2,col4) values (‘”var1”’,’”var2”’,”var3”,’”var4”’)”);//stmt是Statement对象实例 perstmt con.prepareStatement(“insert into tb_name (col1,col2,col2,col4) values (?,?,?,?)”); perstmt.setString(1,var1); perstmt.setString(2,var2); perstmt.setString(3,var3); perstmt.setString(4,var4); perstmt.executeUpdate(); //prestmt是 PreparedStatement 对象实例 不用我多说,对于第一种方法.别说其他人去读你的代码,就是你自己过一段时间再去读,都会觉得伤心. 2.PreparedStatement尽最大可能提高性能. 语句在被DB的编译器编译后的执行代码被缓存下来,那么下次调用时只要是相同的预编译语句就不需要编译,只要将参数直接传入编译过的语句执行代码中(相当于一个涵数)就会得到执行.这并不是说只有一个Connection中多次执行的预编译语句被缓存,而是对于整个DB中,只要预编译的语句语法和缓存中匹配.那么在任何时候就可以不需要再次编译而可以直接执行.而statement的语句中,即使是相同一操作,而由于每次操作的数据不同所以使整个语句相匹配的机会极小,几乎不太可能匹配.比如: insert into tb_name (col1,col2) values (‘11’,’22’); insert into tb_name (col1,col2) values (‘11’,’23’); 即使是相同操作但因为数据内容不一样,所以整个个语句本身不能匹配,没有缓存语句的意义.事实是没有数据库会对普通语句编译后的执行代码缓存. 当然并不是所以预编译语句都一定会被缓存,数据库本身会用一种策略,比如使用频度等因素来决定什么时候不再缓存已有的预编译结果.以保存有更多的空间存储新的预编译语句. 2.最重要的一点是极大地提高了安全性. 即使到目前为止,仍有一些人连基本的恶义SQL语法都不知道. String sql “select * from tb_name where name ‘”varname”’ and passwd’”varpasswd”’”; 如果我们把[’ or ‘1’ ‘1]作为varpasswd传入进来.用户名随意,看看会成为什么? select * from tb_name ‘随意’ and passwd ” or ‘1’ ‘1’; 因为’1’’1’肯定成立,所以可以任何通过验证.更有甚者: 把[‘;drop table tb_name;]作为varpasswd传入进来,则: select * from tb_name ‘随意’ and passwd ”;drop table tb_name;有些数据库是不会让你成功的,但也有很多数据库就可以使这些语句得到执行. 而如果你使用预编译语句.你传入的任何内容就不会和原来的语句发生任何匹配的关系.只要全使用预编译语句,你就用不着对传入的数据做任何过虑.而如果使用普通的statement,有可能要对drop,;等做费尽心机的判断和过虑. 四、总结 关于PreparedStatement接口需要重点记住的是 PreparedStatement可以写参数化查询比Statement能获得更好的性能。对于PreparedStatement来说数据库可以使用已经编译过及定义好的执行计划这种预处理语句查询比普通的查询运行速度更快。PreparedStatement可以阻止常见的SQL注入式攻击。PreparedStatement可以写动态查询语句PreparedStatement与java.sql.Connection对象是关联的一旦你关闭了connectionPreparedStatement也没法使用了。“?” 叫做占位符。PreparedStatement查询默认返回FORWARD_ONLY的ResultSet你只能往一个方向移动结果集的游标。当然你还可以设定为其他类型的值如”CONCUR_READ_ONLY”。不支持预编译SQL查询的JDBC驱动在调用connection.prepareStatement(sql)的时候它不会把SQL查询语句发送给数据库做预处理而是等到执行查询动作的时候调用executeQuery()方法时才把查询语句发送个数据库这种情况和使用Statement是一样的。占位符的索引位置从1开始而不是0如果填入0会导致java.sql.SQLException invalid column index异常。所以如果PreparedStatement有两个占位符那么第一个参数的索引时1第二个参数的索引是2. 以上就是为什么要使用PreparedStatement的全部理由不过你仍然可以使用Statement对象用来做做测试。但是在生产环境下你一定要考虑使用 PreparedStatement 。 ———————————————— 版权声明本文为CSDN博主「离水的鱼儿」的原创文章遵循CC 4.0 BY-SA版权协议转载请附上原文出处链接及本声明。 原文链接https://blog.csdn.net/xuebing1995/article/details/72235380 类结构关系 在ConnectionImpl里 获取PreparedStatement 对应2 public PreparedStatement prepareStatement(String sql) throws SQLException {try {return this.prepareStatement(sql, 1003, 1007);} catch (CJException var3) {throw SQLExceptionsMapping.translateException(var3, this.getExceptionInterceptor());}}获取Statement 对应1public Statement createStatement() throws SQLException {try {return this.createStatement(1003, 1007);} catch (CJException var2) {throw SQLExceptionsMapping.translateException(var2, this.getExceptionInterceptor());}}转自 JDBC 中preparedStatement和Statement区别 https://blog.csdn.net/xuebing1995/article/details/72235380
http://www.hkea.cn/news/14259033/

相关文章:

  • 网站收录上万没有流量中小学网站建设有什么好处
  • 网站icp备案证明文件idea做网站登录
  • 国家工业和信息化部网站备案系统网站违规关键词
  • 厦门市建设局网站住房保障大数据营销的特点
  • 建设工程考试官方网站莱芜信息港金点子招聘
  • ps做网站 大小甘肃省建设厅招标办网站
  • fireworks8做网站wordpress主题 淘宝客
  • 科技广告公司网站模板建设门户网站 业务模板
  • 哪个公司建设网站怎样建设凡科网站
  • 设计必知的设计网站 039苏州适合做网络推广的企业
  • 有做车身拉花的网站吗线上教学网站
  • iis 发布织梦网站wordpress文章发送代码块
  • 怎样自己弄一个网站做网站开发赚钱吗
  • 网站数据库备份还原羽毛球赛事奖金
  • 专门做外国的网站吗WordPress数据库自动切换
  • 龙岩网站制作多少钱网站被墙是谁做的
  • 网站导航的分类有哪些网站建设的工具
  • 拖式网站建设软件站
  • 烟台做网站价格安网需要多少钱
  • 昆山建设局网站最好的网站设计
  • 网站建设管理规定wordpress 帝国 哪个好
  • 北国网seo加盟代理
  • 点击运行显示网站正在建设外贸 推广网站
  • 常州市建设工程质监站网站企业网站排版
  • 中国建设银行上海分行信息网站网络设置的网站
  • 网站建设推广襄樊wordpress ent 主题
  • 怎样做网站地图盐城做网站优化
  • 做网站翻页怎么做遵义网页
  • 电商网站开发实战视频教程wordpress 站外搜索
  • 网站平台推广有哪些html5网站上线模版