JAVA的JDBC有多种方法可以对数据库进行查询,但使用比较多的还是conn.prepareStatement()和conn.createStatement()两种方式打开数据库游标进行查询,具体方法就不多说了,主要说说两种方式的区别。个人感觉在开发中还是应尽量使用prepareStatement方式进行数据库查询,原因有以下几点:
1:安全性
prepareStatement绑定参数方式 比createStatement直接写sql更加安全,因为前者可以防止sql注入攻击。
以下脚本显示了一个简单的 SQL 注入。此脚本通过串联硬编码字符串和用户输入的字符串而生成一个 SQL 查询:
var sql = "select * from OrdersTable where ShipCity = '" + ShipCity + "'"; //其中 ShipCity 是用户在表单里输入的值
用户将被提示输入一个市县名称。如果用户输入 Redmond,则查询将由与下面内容相似的脚本组成:
SELECT * FROM OrdersTable WHERE ShipCity = 'Redmond'
但是,假定用户输入以下内容:
Redmond'; drop table OrdersTable--
此时,脚本将组成以下查询:
SELECT * FROM OrdersTable WHERE ShipCity = 'Redmond';drop table OrdersTable--'
这时假设使用createStatement方式查询你的程序可能像下面这样:
String querySql = “SELECT * FROM OrdersTable WHERE ShipCity = 'Redmond';drop table OrdersTable--'”;
stmt = conn.createStatement();
stmt.execute(querySql);
分号 (;) 表示一个查询的结束和另一个查询的开始。双连字符 (--) 指示当前行余下的部分是一个注释,应该忽略。如果修改后的代码语法正确,则服务器将执行该代码。SQL Server 处理该语句时,SQL Server 将首先选择 OrdersTable 中的所有记录(其中 ShipCity 为 Redmond)。然后,SQL Server 将删除 OrdersTable。
而使用prepareStatement 利用? 传参方式,java会自动将参数中的特殊字符进行转义,从而避免了以上的SQL攻击问题。
2:高效性
prepareStatement绑定参数方式 比createStatement更加高效。假设使用createStatement方式查询程序可能像下面这样:
String querySql = “SELECT * FROM CUSTOMERINFO WHERE NAME = ‘” + 姓名输入框的值 + “’”;
stmt = conn.createStatement();
stmt.execute(querySql);
如果用户第一次输入AAA查询SQL为:
SELECT * FROM CUSTOMERINFO WHERE NAME = ‘AAA’
如果此语句是第一次运行则Oracle发现这句SQL未在SHAREPOOL(共享池)中就会对这句SQL进行硬解析。而第二次用户输入BBB则查询SQL为:
SELECT * FROM CUSTOMERINFO WHERE NAME = ‘BBB’
如果此语句也是第一次运行, Oracle会从SHAREPOOL中查找此这句SQL以期望重用解析方案但发现没有找到,则会对上面这句SQL进行硬解析,因为Oracle会把
SELECT * FROM CUSTOMERINFO WHERE NAME = ‘AAA’
和
SELECT * FROM CUSTOMERINFO WHERE NAME = ‘BBB’
看成两句完全不同的SQL尽管两句只差了一个查询条件, 要知道Oracle的硬解析是很耗费资源的,它包括: 分析、限定(名称解析)、安全检查、优化等等。
而使用prepareStatement 利用? 传参方式就会利用Oracle绑定参数特性,解析时会忽略绑定参数,即:
SELECT * FROM CUSTOMERINFO WHERE NAME = ?
查询经过一次编译后,查询方案存储在Oracle的SHAREPOOL(共享池)中,可以用来检索和重用。在性能和伸缩性方面,这两者的差异是巨大的,甚至是惊人的。
分享到:
相关推荐
免费JAVA毕业设计 2024成品源码+论文+录屏+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
免费JAVA毕业设计 2024成品源码+论文+录屏+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
1、文件内容:perl-Class-Load-0.20-3.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/perl-Class-Load-0.20-3.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
FCN实现斑马线分割(含数据集)
,西门子200smart控制3轴伺服程序,plc程序结构条理清晰,层次分明,注释齐全。 西门子触摸屏程序画面功能齐全,画面精美。 有io图。 电气原理图。 参考本案例程序。 可快速掌握西门子200smart控制伺服编程技巧,扩展自己的编程逻辑思维。 节省大量不必要花费的时间,可快速上手。
资源说明: 1:csdn平台资源详情页的文档预览若发现'异常',属平台多文档切片混合解析和叠加展示风格,请放心使用。 2:29页图文详解文档(从零开始项目全套环境工具安装搭建调试运行部署,保姆级图文详解),旨在为更多的人甚至零基础的人也能运行、使用和学习。 3:配套毕业论文,万字长文,word文档,支持二次编辑。 4:范例参考答辩ppt,pptx格式,支持二次编辑。 5:工具环境、ppt参考模板、相关电子教程、视频教学资源分享。 6:资源项目源码均已通过严格测试验证,保证能够正常运行,本项目仅用作交流学习参考,请切勿用于商业用途。 7:项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通。 内容概要: 本系统基于B/S网络结构,在IDEA中开发。服务端用Java并借Spring Boot框架搭建后台。前台采用支持HTML5的VUE框架。用MySQL存储数据,可靠性强。 能学到什么: 使用Spring Boot搭建后台。VUE框架构建前端交互界面、前后端数据交互、MySQL管理数据、从零开始环境搭建、调试、运行、打包、部署流程。
"基于ADMM算法的多微网协同优化调度策略:实现分布式电能共享与信息保护",02-基于ADMM算法的多微网协同优化调度 摘要:为了实现微网间的电能以及能量共享,采用ADMM方法,实现了微网之间的电能与协同优化,方法为分布式算法,有效的保护了各个微网的信息,避免了集中优化的大量信息索取。 ,基于ADMM算法; 多微网; 协同优化调度; 分布式算法; 能量共享; 信息保护,基于ADMM算法的微网协同优化调度方案
b站弹幕格式转换 xml转ass
.NET SDK Senparc.Weixin for C# .NET Framework .NET Core.NET 8.0/JSSDK WeChat SDK for C#. github官网 github官网 github官网 github官网 github官网
ollama基础知识简介.md
免费JAVA毕业设计 2024成品源码+论文+录屏+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
,fx3u和西门子v20 台达vfd-m 三菱E700 rtu所需硬件:FX3U PLC,FX3U-485BD通信板,变频器。 功能:使用fx3u-485bd板,rtu通信控制西门子v20 台达VFD-M 三菱E700三种变频器正反转,停止,频率设定,加减速,以及对频率,电压,电流的读取,有运行指示,效果可以看视频,反应及时,运行可靠,三种变频器程序是单个的,非三台一起控制。 的内容包括程序,接线,参数说明
软件渲染器tinyrenderer
电脑调音软件下载是专为汽车音响爱好者和专业人士设计的一款强大工具, 这款软件的主要功能在于帮助用户对车载音频系统进行精确的数字信号处理,以提升音乐播放效果,提供更丰富的听觉体验。
1、文件内容:perl-Date-Calc-6.3-14.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/perl-Date-Calc-6.3-14.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
给山东大学软件学院的学弟学妹们使用
生成式对抗网络在金融数据中的应用
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
资源说明: 1:csdn平台资源详情页的文档预览若发现'异常',属平台多文档切片混合解析和叠加展示风格,请放心使用。 2:29页图文详解文档(从零开始项目全套环境工具安装搭建调试运行部署,保姆级图文详解),旨在为更多的人甚至零基础的人也能运行、使用和学习。 3:配套毕业论文,万字长文,word文档,支持二次编辑。 4:配套答辩ppt,pptx格式,支持二次编辑。 5:工具环境、ppt参考模板、相关电子教程、视频教学资源分享。 6:资源项目源码均已通过严格测试验证,保证能够正常运行,本项目仅用作交流学习参考,请切勿用于商业用途。 7:项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通。 内容概要: 本系统基于B/S网络结构,在IDEA中开发。服务端用Java并借Spring Boot框架搭建后台。前台采用支持HTML5的VUE框架。用MySQL存储数据,可靠性强。 能学到什么: 使用Spring Boot搭建后台。VUE框架构建前端交互界面、前后端数据交互、MySQL管理数据、从零开始环境搭建、调试、运行、打包、部署流程。
内容概要:文章详细介绍了计算机二级和软考两类计算机认证考试的习题资源获取途径及相关备考建议。对于计算机二级考试,提供了官方教材与配套习题、在线题库、专业论坛、培训机构等多种渠道的习题来源介绍。而对于软考,则提及了官方指南与教程、历年真题及其解析、在线学习资源和各类辅导书籍等方面的习题资源,并阐述这些资源对于考生熟悉考试题型、检验学习成果的重要性。最后提出了如制定备考计划、多做练习、注意理解和模拟考试这四大备考要点。 适用人群:准备报考全国计算机等级考试二级或者软考的技术人员或学生群体。 使用场景及目标:旨在为备考人员提供全面有效的习题资源收集方式和支持性建议,助力他们高效备考并通过考试。 其他说明:文中特别强调理解知识点而非单纯记忆、利用各种线上线下的辅助工具和材料来加强对知识的掌握,还有就是实战演练的作用不可忽视。