什么是JDBC(二)-Statement和PreparedStatement的区别-详解JDBC系列

2024-05-02 21:48

本文主要是介绍什么是JDBC(二)-Statement和PreparedStatement的区别-详解JDBC系列,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Statement和PreparedStatement的区别

概述

1.基于效率和安全性两个方面,再实际开发中,我们一般使用PreparedStatement来替换普通的Statement
2.有些特殊只能使用Statement

PreparedStatement基本用法

1.PrepareStatement支持sql语句问号占位
2.PreparedStatement本质上也是一个"车",多了一个预编译的功能即当创建PreparedStatement对象时立即把SQL语句发送到数据库编译储存

//查询数据
String sql="select * from student limit ?,?";
PreparedStatement pst = con.prepareStatement(sql);
pst.setInt(1,1);//从第二条记录开始查询
pst.setInt(2,5);//最大显示5条记录//添加数据
String sql="insert into student(name,age,birth,schid) values(?,?,?,?)";
PreparedStatement pst = con.prepareStatement(insert);
//给参数赋值
pst.setString(1,name);
pst.setInt(2,age);
pst.setDate(3,birth);
pst.setInt(4,schid);
pst.executeUpdate();

两者比较

1.效率:PrepareStatement比Statement高,因为前者存在预编译,sql语句已经在数据库里等着了,但是这个差别往往还体现在驱动里,mysql体现不明显,差别比较大的是Oracle
2.安全性:PreparedStatement可以防止SQL注入问题

结论:推荐使用PrepareStatement 但是有些情况只能使用Statement,如👇三种情况之恶能用前者

-例1:
表名也是?占位 
select * from ?
如果传入一个stu则默认匹配字符串 则会生成 select * from 'stu',这是错误的.
-例2:
模糊查询中不能使用 ? 
select * from studentwhere name like '%?%' 这种情况?表示?而不是占位符,所以这种时候这能用Statement
-例3:order by后边用?select * from XXX where xx order by ?如果传入?我们传入name 则自动会匹配成 "name"这句话就变成了 select * from XXX where XX order by "name",而我们不需要这个"",所以这种情况我们也只能使用Statement

总结

自己写JDBC连接的话(当然这种情况现在很少了),能用PreparedStatement就不用Statement,说的有错误希望大家指正

这篇关于什么是JDBC(二)-Statement和PreparedStatement的区别-详解JDBC系列的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/955207

相关文章

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

MySQL的JDBC编程详解

《MySQL的JDBC编程详解》:本文主要介绍MySQL的JDBC编程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、前置知识1. 引入依赖2. 认识 url二、JDBC 操作流程1. JDBC 的写操作2. JDBC 的读操作总结前言本文介绍了mysq

Redis 的 SUBSCRIBE命令详解

《Redis的SUBSCRIBE命令详解》Redis的SUBSCRIBE命令用于订阅一个或多个频道,以便接收发送到这些频道的消息,本文给大家介绍Redis的SUBSCRIBE命令,感兴趣的朋友跟随... 目录基本语法工作原理示例消息格式相关命令python 示例Redis 的 SUBSCRIBE 命令用于订

Vue和React受控组件的区别小结

《Vue和React受控组件的区别小结》本文主要介绍了Vue和React受控组件的区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录背景React 的实现vue3 的实现写法一:直接修改事件参数写法二:通过ref引用 DOMVu

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Python中 try / except / else / finally 异常处理方法详解

《Python中try/except/else/finally异常处理方法详解》:本文主要介绍Python中try/except/else/finally异常处理方法的相关资料,涵... 目录1. 基本结构2. 各部分的作用tryexceptelsefinally3. 执行流程总结4. 常见用法(1)多个e

SpringBoot日志级别与日志分组详解

《SpringBoot日志级别与日志分组详解》文章介绍了日志级别(ALL至OFF)及其作用,说明SpringBoot默认日志级别为INFO,可通过application.properties调整全局或... 目录日志级别1、级别内容2、调整日志级别调整默认日志级别调整指定类的日志级别项目开发过程中,利用日志

Java中的抽象类与abstract 关键字使用详解

《Java中的抽象类与abstract关键字使用详解》:本文主要介绍Java中的抽象类与abstract关键字使用详解,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、抽象类的概念二、使用 abstract2.1 修饰类 => 抽象类2.2 修饰方法 => 抽象方法,没有

MySQL8 密码强度评估与配置详解

《MySQL8密码强度评估与配置详解》MySQL8默认启用密码强度插件,实施MEDIUM策略(长度8、含数字/字母/特殊字符),支持动态调整与配置文件设置,推荐使用STRONG策略并定期更新密码以提... 目录一、mysql 8 密码强度评估机制1.核心插件:validate_password2.密码策略级

从入门到精通详解Python虚拟环境完全指南

《从入门到精通详解Python虚拟环境完全指南》Python虚拟环境是一个独立的Python运行环境,它允许你为不同的项目创建隔离的Python环境,下面小编就来和大家详细介绍一下吧... 目录什么是python虚拟环境一、使用venv创建和管理虚拟环境1.1 创建虚拟环境1.2 激活虚拟环境1.3 验证虚