“我们盛装奔赴一场五千公里的婚礼”| 【松下S1H】旅拍工作分享

PreparedStatement的使用

  • 一问一答环节
  • why?为什么要使用它?


较为官方的解释:
PreparedStatement是Statement的子接口,它可以预编译 SQL 语句并将预编译后的SQL语句存储在PreparedStatement对象中。由于 PreparedStatement 对象已预编译过,所以其执行速度要快于 Statement对象。

大白话:
我们在执行查询或者更新数据表数据的时候,拼写SQL语句是一个很费力并且容易出错的事情,PreparedStatement可以简化这样的一个过程.

一问一答环节

PreParedStatement(预编译语句)

why?为什么要使用它?

使用Statement需要进行拼写SQl语句,辛苦并且容易出错,之前使用Statement的SQL语句的形式是这样的

String sql = "insert into student" + " values("
+ student.getFlowId() + "," + student.getType() + ",'"
+ student.getIdCard() + "','" + student.getExamCard() + "','"
+ student.getStudentName() + "','" + student.getLocation()
+ "'," + student.getGrade() + ")";

使用PreparedStatement:是Statement的子接口,可以传入带占位符的SQL语句,提供了补充占位符变量的方法

//创建PrepareStatement
preparedStatement = connection.prepareStatement(sql);

现在当我们看里面的sql作为参数传入了,就不需要我们在费力拼写了。

String sql="insert into student values(?,?,?,?,?,?,?)";

可以调用PreparedStatement的setXxx(数据类型)(int index,Object val)设置占位符的值,其中index的值从1开始

index的值从1开始

执行SQl语句:excuteQuery()或者excuteUpdate()就可以完成查询或者数据的更新.【注意】:此时函数的参数位置不需要传入SQL语句,注意同使用Statement的update函数的差别

部分案列代码如下:

//添加学生private void addStudent() {Connection connection = null;PreparedStatement preparedStatement = null;try {//加载驱动Class.forName("com.mysql.jdbc.Driver");//建立连接connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "123456");Student student=new Student(6, "zczc");String sql = "insert into student values (?,?)";//创建PrepareStatementpreparedStatement = connection.prepareStatement(sql);preparedStatement.setInt(1, student.getStudentID());preparedStatement.setString(2, student.getStudentName());//执行SQL// 执行更新操作preparedStatement.executeUpdate();} catch (Exception e) {e.printStackTrace();//关闭资源} finally {if (preparedStatement != null) {try {preparedStatement.close();} catch (SQLException e) {e.printStackTrace();}preparedStatement = null;}if (connection != null) {try {connection.close();} catch (SQLException e) {e.printStackTrace();}connection = null;}}}

使用PreparedStatement的好处:

  1. 提高代码的可读性和可维护性;
  2. 最大程度的提高性能,SQL语句被多次执行
  3. 可以防止SQL注入

PreparedStatement的使用相关推荐

  1. resultset mysql_MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)...

    [声明] 欢迎转载,但请保留文章原始出处→_→ [正文] 一.ResultSet接口的介绍: 对数据库的查询操作,一般需要返回查询结果,在程序中,JDBC为我们提供了ResultSet接口来专门处理查 ...

  2. PreparedStatement

    该 PreparedStatement接口继承Statement,并与之在两方面有所不同: PreparedStatement 实例包含已编译的 SQL 语句.这就是使语句"准备好" ...

  3. 关于JDBC中的 PreparedStatement 的使用讲解

    **关于JDBC中的 PreparedStatement 的使用讲解@**TOC 文章转载于博客 https://www.cnblogs.com/ysw-go/p/5459330.html 如有侵权, ...

  4. preparedStatement平台:

    public class cs{ public static void main(String[] args){ try{ class.forName("com.mysql.jdbc.Dri ...

  5. 详解PreparedStatement

    详解PreparedStatement /*** PrepareStatement 测试插入数据库*//*** 如果使用Statement,那么就必须在SQL语句中,实际地去嵌入值,比如之前的inse ...

  6. JDBC--Statement,PreparedStatement,CallableStatement的区别

    JDBC: Statement(接口)      | PreparedStatement(接口)      | CallableStatement(接口) 以上三者为继承关系. 1).概念: Stat ...

  7. PreparedStatement和CallableStatement都可以调用存储过程

    2019独角兽企业重金招聘Python工程师标准>>> 他们都可以调用存储过程,上午收了下主要区别.但是等于放屁,说了一大推也没说个所以然,就看见了这一句,说是CallableSta ...

  8. 【转】JDBC为什么要使用PreparedStatement而不是Statement

    http://www.importnew.com/5006.html PreparedStatement是用来执行SQL查询语句的API之一,Java提供了 Statement.PreparedSta ...

  9. java.lang.AbstractMethodError: com.mysql.jdbc.PreparedStatement.setCharacterStream(ILjava/io/Reader;

    出现上述异常是在使用MySQL进行大文本数据的读写时,使用PreparedStatement中的 setCharacterStream(int parameterIndex,Reader reader ...

  10. JDBC PreparedStatement 实现原理【推荐阅读】

    ???关注微信公众号:[芋艿的后端小屋]有福利: RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表 RocketMQ / MyCAT / Sharding-JDB ...

最新文章

  1. 135编辑器 html,135编辑器,微信图文编辑器,微信图文美化编辑器,格式多方便的图文编辑-...
  2. Spring boot 注解 ConfigurationProperties 的使用
  3. vue main.js 导入文件报错Module build failed: Error: No PostCSS Config found in:
  4. 今天准备正式开博了!专注于Silverlight!
  5. pyhton (一)基础
  6. Ubuntu16.04下创建工作空间并添加自己的功能包(python代码)
  7. 计算机基础知识统考12月份,(精)2016年12月份电大统考计算机考前辅导基础知识考试小抄【呕心沥血整理,值得一看哦!】.doc...
  8. android imageview移动,基于Android实现随手指移动的ImageView
  9. 疯狂java学习笔记之面向对象(三) - 方法所属性和值传递
  10. 垃圾邮件是什么样的邮件
  11. RTCP协议解析--RR
  12. 手机自动阅读挣钱,这次用脚本写
  13. 解析word文件的简单实现
  14. 购物直播APP系统+短视频系统开发方案
  15. honeyview(蜂蜜浏览器)将图片置于顶层
  16. dangdang.com的故事
  17. 关键词搜索排行榜-精准找到行业流量关键词
  18. PS不改变图片分辨率条件下改变照片kb大小
  19. python中set集合的使用
  20. 老男孩python培训课件

热门文章

  1. abaqus中python怎么建立参考点_怎么在abaqus中选定中心为参考点
  2. KDD 2022论文合集(持续更新中)
  3. PLC对步进电机的快速精确定位控制
  4. c语言差分qpsk编码信道估计 pudn,基于DSP的电力线载波OFDM调制解调器设计.doc
  5. MQTT介绍,服务器(EMQ X)搭建,客户端(mqtt-spy,安卓)使用,java编程示例
  6. 阿里巴巴战略发展史(转)
  7. 电力-开闭所/配电房/变电所/变电站
  8. 51单片机实现蜂鸣器报警
  9. 怎样用计算机粉碎文件夹,粉碎文件夹怎么操作 粉碎文件夹操作方法
  10. windows eclipse超详细安装教程