2022-08-19 PreparedStatement

PreparedStatement接口是 Statement的子接口,它表示一条预编译过的SQL语句

什么是SQL注入

SQL注入是利用某些系统没有对用户输入的数据进行充分的检查,而在用户输入数据中注入非法的SQL语句段或命令,从而利用系统的SQL引擎完成恶意行为的做法。

PreparedStatement:
PreparedStatement是java.sql包下面的一个接口,用来执行SQL语句查询,通过调用connection.preparedStatement(sql)方法可以获得PreparedStatment对象。数据库系统会对sql语句进行预编译处理(如果JDBC驱动支持的话),预处理语句将被预先编译好,这条预编译的sql查询语句能在将来的查询中重用,这样一来,它比Statement对象生成的查询速度更快。
Statement
使用 Statement 对象。在对数据库只执行一次性存取的时侯,用 Statement 对象进行处理。PreparedStatement 对象的开销比Statement大,对于一次性操作并不会带来额外的好处。

使用PreparedStatement:是Statement的子接口,可以传入带占位符的SQL语句,提供了补充占位符变量的方法。
PreparedStatement ps=conn.preparedStatement(sql);
可以看到将sql作为参数传入了,就不需要我们在费力拼写了。
变成了这样的形式
String sql="insert into examstudent values(?,?,?,?,?,?,?)";

建立连接

connection = JDBCUtil.getConnection();

写SQL语句

String sql = "select * from account where username = ? and password = ?";

创建preparedStatement对象预编译

pstmt = connection.prepareStatement(sql);

给占位符赋值(执行参数)

pstmt.setString(1,username); pstmt.setString(2,password);
//写SQL语句 String sql = "select * from user where username = ? and password = ?";
//预编译 pstmt = conn.prepareStatement(sql);
//占位符赋值 pstmt.setString(1,"aaa"); pstmt.setString(2,"b' or '1' = '1");

执行SQL

ResultSet resultSet1 = pstmt.executeQuery();

修改教师信息


      Connection conn = null;
      PreparedStatement pstmt = null;

      try {
          conn = JDBCUtil.getConnection();
          String sql = "update teacher set name = ? where id = ?";
          // 预编译
          pstmt = conn.prepareStatement(sql);
          // 给占位符赋值,根据位置
          pstmt.setString(1,"JJ");
          pstmt.setInt(2,6);

          // 正式执行sql
          int i = pstmt.executeUpdate();
          System.out.println(i);
      } catch (ClassNotFoundException e) {
          throw new RuntimeException(e);
      } catch (SQLException e) {
          throw new RuntimeException(e);
      } catch (IOException e) {
          throw new RuntimeException(e);
      } finally {
          JDBCUtil.close(conn,pstmt);
      }

  }

关于PreparedStatement接口,需要重点记住的是:
1. PreparedStatement可以写参数化查询,比Statement能获得更好的性能。
2. 对于PreparedStatement来说,数据库可以使用已经编译过及定义好的执行计划,这种预处理语句查询比普通的查询运行速度更快。
3. PreparedStatement可以阻止常见的SQL注入式攻击。
4. PreparedStatement可以写动态查询语句
5. PreparedStatement与java.sql.Connection对象是关联的,一旦你关闭了connection,PreparedStatement也没法使用了。
6. “?” 叫做占位符。

Original: https://www.cnblogs.com/YQuicksilver/p/16612714.html
Author: QuickSilver
Title: 2022-08-19 PreparedStatement

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/504966/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Java面试题(六)–Redis

    1 Redis基础篇 1、简单介绍一下Redis优点和缺点? 优点: 1、本质上是一个 Key-Value 类型的内存数据库,很像memcached 2、整个数据库统统加载在内存当…

    数据库 2023年6月16日
    082
  • 软件测试基础理论

    软件基础的理论 一, 什么是软件产品 它是一个逻辑产品,没有实体,包括程序,文档和数据,需要通过终端设备才能体现出来功能和作用 二, 软件产品的中间过程文档 客户需求 &#…

    数据库 2023年6月16日
    087
  • MySQL面试整理

    索引的目的在于提高查询效率,以及添加约束; 常用的索引有: 普通索引,唯一索引,联合索引,全文索引,空间索引… 唯一索引 有两个分类 分别是:主键索引和唯一索引 联合索…

    数据库 2023年6月9日
    0168
  • Windows10 下使用 telnet 命令

    正常情况下 windows 是使用不了 telnet 命令的: 打开控制面板-》程序和功能-》启用或关闭 Windows 功能 勾选 “Telnet客户端”…

    数据库 2023年6月14日
    072
  • Linux快速安装流量监控工具(实用版)

    前言: Linux流量监控工具,在此我推荐两种分别为: 1、nload(推荐)因为个人看着舒服点😂 2、iftop 以上两种任选其一即可,在此对两种都有介绍和安装教程,我写了,大家…

    数据库 2023年6月16日
    072
  • 根据温度、气压计算海拔高度

    基本概念 标准大气压:表示气压的单位,习惯上常用水银柱高度。例如,一个标准大气压等于760毫米高的水银柱的重量,它相当于一平方厘米面积上承受1.0336公斤重的大气压力。由于各国所…

    数据库 2023年6月14日
    0119
  • 主键约束,唯一约束,默认约束,检查约束,删除主键,删除外键按,删除列,添加列

    关键字:constraint约束是表级限制,它通过限制表的数据来确保数据的完整性和一致性。 [En] A constraint is a table-level restricti…

    数据库 2023年5月24日
    063
  • 达梦数据库_DM8配置实时主备

    1、环境说明 准备三台机器DM_HD1、DM_HD11、DM_SH,DM_HD1和DM_HD11用来部署主备库,DM_SH用来部署确认监视器。其中DM_HD1和DM_HD11配置两…

    数据库 2023年6月11日
    0119
  • MySQL多表查询

    多表查询 案列说明 笛卡尔积的理解 select id,department_name from employees,departments;#错的 select id,depar…

    数据库 2023年5月24日
    074
  • MySQL InnoDB 锁的二三事

    近日, 在一个小型项目中, 遇到了一个触及我知识盲区的bug. 项目用的是MySQL 5.7.25, 其中有一张表 config_data, 包含四个字段, id, name, v…

    数据库 2023年6月11日
    0106
  • 电脑必须打开的设置

    电脑性能设置 优化设置一:开启卓越性能 其实,win10系统中有一个卓越性能的隐藏设置,它可以让我们的电脑,在现有配置的情况下,发挥出最优良的性能。 1、 同时按住”w…

    数据库 2023年6月14日
    098
  • InnoDB 中不同SQL语句设置的锁

    锁定读、UPDATE 或 DELETE 通常会给在SQL语句处理过程扫描到的每个索引记录上设置记录锁。语句中是否存在排除该行的WHERE条件并不重要。InnoDB不记得确切的WHE…

    数据库 2023年5月24日
    067
  • 5、Idea同时选择多处光标进行编辑

    1、按住Alt+Shift,然后用鼠标左键点击文本,可以让光标在多个位置出现2、每个光标都会同时输入你正在输入的文本3、ESC退出 搜索 复制 Original: https://…

    数据库 2023年6月6日
    082
  • MIB MODULE HOST-RESOURCES-MIB

    Textual Conventions Name: BooleanSyntax: Enumerated Name: KBytesSyntax: Integer Range Name…

    数据库 2023年6月11日
    088
  • 一文了解Cookie

    Cookie 什么是 Cookie? 先要了解HTTP是 无状态的Web服务器,什么是无状态呢?一次对话完成后下一次对话完全不知道上一次对话发生了什么。如果在Web服务器中只是用来…

    数据库 2023年6月11日
    090
  • Centos安装mysql57

    1.1 MySQL安装 1.1.1 下载 wget 命令 yum -y install wget 1.1.2 在线下载mysql安装包 wget https://dev.mysql…

    数据库 2023年5月24日
    0108
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球