在实际开发中,经常会需要对数据库进行访问,最常见的开发方法就类似:

string sql = "select * from table1 where name = '" + name + "'";

这种方式有被注入攻击的危险

所以解决方案有2种:

1、改成:string sql = "select * from table1 where name = '" + name.Replace("'","''") + "'"; // 替换一个单引号为两个单引号

2、使用参数化形式,如在Oracle中,用如下方式执行:

string sql = "select * from table1 where name = :vName";

OracleParameter para = new OracleParameter("vName", OracleType.VarChar);

para.Value = name;

OracleConnection con = new OracleConnection (constr);

con.Open();

OracleCommand com = con.CreateCommand();

com.CommandText = sql;

com.Parameters.Add(para);

com.ExecuteReader();

如此看来,使用参数化的形式复杂的许多,用替换的方式简单的多

所以我一直以来都是用替换的方式来处理,昨天发现了用参数的另一个好处

才知道,使用参数化形式还可以提高Oracle的性能(不知道SqlServer有没有类似的好处)

通过分析SQL语句的执行计划优化SQL

共享sql语句

为了不重复解析相同的SQL语句(因为解析操作比较费资源,会导致性能下降),在第一次解析之后,ORACLE将SQL语句及解析后得到的执行计划存放在内存中。这块位于系统全局区域SGA(system global area)的共享池(shared buffer pool)中的内存可以被所有的数据库用户共享。因此,当你执行一个SQL语句(有时被称为一个游标)时,如果该语句和之前的执行过的某一语句完全相同,并且之前执行的该语句与其执行计划仍然在内存中存在,则ORACLE就不需要再进行分析,直接得到该语句的执行路径。ORACLE的这个功能大大地提高了SQL的执行性能并大大节省了内存的使用。使用这个功能的关键是将执行过的语句尽可能放到内存中,所以这要求有大的共享池(通过设置shared buffer pool参数值)和尽可能的使用绑定变量的方法执行SQL语句。

当你向ORACLE 提交一个SQL语句,ORACLE会首先在共享内存中查找是否有相同的语句。这里需要注明的是,ORACLE对两者采取的是一种严格匹配,要达成共享,SQL语句必须完全相同(包括空格,换行等)。

下面是判断SQL语句是否与共享内存中某一SQL相同的步骤:

1. 对所发出语句的文本串进行hashed。如果hash值与已在共享池中SQL语句的

parameter oracle,Oracle Parameter相关推荐

  1. oracle show parameter,在sqlplus里用show parameter 直接显示oracle隐含参数

    Oracle 启动用到了初始化参数,通常我们都可以在sqlplus里用show parameter 来获得.而Oracle为了debug 或者解决一些特殊的问题,还提供了一些以"_" ...

  2. oracle show parameter,用show parameter也能显示隐含参数

    Oracle 数据库启动时用到的数据库初始化参数,我们通常是在 sqlplus 中使用 show parameter 命令来获取.但这里看到只会是一些公开的参数,和已经修改的隐含参数. Oracle ...

  3. 手动升级oracle,ORACLE 10.2.0.1手动升级到10.2.0.4

    ORACLE 10.2.0.1手动升级到10.2.0.4 1.解压zip包以及查看目录权限 p6810189_10204_Linux-x86-64.zip oracle@single-10g:/u01 ...

  4. 负载均衡设备oracle,Oracle RAC 服务器端联接负载均衡(Load Balance)

    Oracle RAC 服务器端连接负载均衡(Load Balance) Oracle RAC服务器端的负载均衡是根据RAC中各节点的连接负荷数情况,将新的连接请求分配到负荷最小的节点上去.当数据库处于 ...

  5. 使用sys导出oracle,oracle 让sys用户执行exp导出操作

    oracle 让sys用户执行exp导出操作 [oracle@localhost ~]$ exp sys/abcdefg as sysdba full=y file=/tmp/full100.dmp ...

  6. oracle -- Oracle初始化参数详解

    oracle -- Oracle初始化参数详解 Oracle数据库系统根据初始化参数文件init.ora中设置的参数来配置自身的启动,每个实例在启动之前,首先读取这些参数文件中设置的不同参数. Ora ...

  7. 汉字 order by oracle,oracle 使用order by 对汉字进行多字段排序

    今天遇到一个奇怪的问题, 在两个不同的数据库里执行同样的sql语句, 相同的数据却排序结果不一致. 执行sql如下: select decode(brch.LOCAL, 'Y', '国内', '国际' ...

  8. 成功解决ValueError: Parameter values for parameter (n_estimators) need to be a sequence.

    成功解决ValueError: Parameter values for parameter (n_estimators) need to be a sequence. 目录 解决问题 解决思路 解决 ...

  9. 成功解决ValueError: Parameter values for parameter (max_depth) need to be a sequence.

    成功解决ValueError: Parameter values for parameter (max_depth) need to be a sequence. 目录 解决问题 解决方法 解决思路 ...

  10. pycharm报黄提示(黄色高亮警告):non-default parameter follows default parameter(定义时将没有默认值的参数放到了有默认值参数的后面)

    今天看QWidget源码的时候,看见里面有个参数被pycharm用红色波浪线标注,鼠标移动到上面,显示: non-default parameter follows default parameter ...

最新文章

  1. 3、vue-router之什么是动态路由
  2. day14 集合与函数
  3. php将上传的图片转为base64,html5实现把上传的图片转成base64编码在显示(代码实例)...
  4. 本地windows主机无法访问虚拟机里主机解决办法
  5. h5页面点击事件ios没反应 移动端兼容性问题
  6. 传智播客java测试题_传智播客Java基础综合测试题
  7. 一文细数Vision transformer家族成员
  8. (图文)HBASE的知识点以及工作原理的详细解释--架构
  9. Bailian4129 变换的迷宫【BFS】
  10. 霍邱一中2021高考成绩查询入口,2021六安高考成绩查询系统
  11. 简单几何(四边形形状) UVA 11800 Determine the Shape
  12. 9.15-hspice语法
  13. html5防止屏幕休眠,防止休眠或屏幕关闭插件
  14. 如何选择适合你的兴趣爱好(七十一),养鸟
  15. [LiteratureReview]A Collaborative Visual SLAM Framework for Service Robots
  16. 双活数据中心架构分析及优缺点
  17. 分享一个stm8s003单片机的ADC转换,附加一个冒泡算法(用于减少误差)
  18. 用C语言写飞机小游戏
  19. 用Python画小猪佩奇,看完别说你不会
  20. 读完《万历十五年》之后的一点看法

热门文章

  1. JfreeChart常用表格绘制
  2. 多线程基础之二:mutex和semaphore使用方法
  3. 酒店小秘:酒店行业应用再添新兵
  4. python实战-京东签到及登入滑块验证
  5. 第六章Android绘图机制与处理技巧(Android群英传)
  6. 浏览器对url字符的处理
  7. 小组第四次会议记录(11月5日)
  8. HTML5期末大作业:文化网页设计——西餐文化5页(代码质量好) 学生DW网页设计作业源码 web课程设计网页规划与设计
  9. 使用wp-config Redirect震撼少年黑帮
  10. 深度思考决定人生命运