首页 > 其他分享 >2022-08-19 PreparedStatement

2022-08-19 PreparedStatement

时间:2022-08-22 21:59:51浏览次数:61  
标签:语句 PreparedStatement 19 08 sql Statement SQL pstmt

PreparedStatement

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

什么是SQL注入

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

preparedstatement和statement的区别

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

Why?为什么要用它??

使用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. “?” 叫做占位符。

标签:语句,PreparedStatement,19,08,sql,Statement,SQL,pstmt
From: https://www.cnblogs.com/YQuicksilver/p/16612714.html

相关文章

  • 2022-08-22 第二小组 张鑫 学习笔记
    实训四十四天HTML复习学习内容HTML基本框架head:头,标签处。包含了所有的头部信息元素title:适配搜索引擎metacharset=utf-8定义了浏览器工具栏的标题,当网页被收藏......
  • 2022-08-22 第八组 卢睿 学习心得
    目录数据库连接池jdbc使用数据库连接池的必要性池化思想比较常见的数据库连接池德鲁伊数据库连接池配置文件hikari数据库连接池配置文件获取连接DBUtils数据库连接池conn......
  • 0822_浅学html
    1.超级链接普通的链接:<ahref="http://www.baidu.com"target="_self">百度一下</a><br>图像链接:<ahref="http://www.baidu.com"><imgwidth="150"src="img/libai.jpe......
  • 2022-08-22 第六组 刘明延 学习笔记
     ......
  • 2022-08-22 第五组 赖哲栋 学习笔记
    什么是HTMLHTML是用来描述网页的一种语言HTML叫做超文本标记语言(HyperTextMarkerUpLanguage)标记语言就是一套标记标签HTML使用标记标签来描述网页网页由谁来解......
  • sql server2019 发布订阅
    1、新建文件夹“dbshare”并共享2、新建发布3、设置快照路径4、新建订阅(在订阅服务器上操作)5、采坑!!!到这位置,基本就完事了,但是发现怎么TM也不好用。......
  • 2022-08-22 第四小组 王星苹 学习笔记
    复习HTML,前端的一些复习。学习总结:  定义音频内容和定义视频内容<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metah......
  • 2022-08-20 第四组 王星苹 学习笔记
    学习心得   学习总结数据库连接池connection是一种稀有资源,一个连接建立就创建了一个资源。比如:QQ连上了,我的QQ和腾讯的服务器建立了一个连接,有代价,何时。有可......
  • 2022-08-22 第二组刘禹彤 学习笔记
    打卡37天    ###学习内容HTML概述HTML是用来描述网页的一种语言HTML叫做超文本标记语言(HyperTextMarkerUpLanguage)HTML不是编程语言,而是一种标记语言,标......
  • FTP服务搭建-Windows Server 2008搭建FTP服务
         在与银行进行存管测试的时候,需要搭建FTP服务来进行文件交互,搭建步骤如下: 一、概述搭建FTP服务主要有以下几个步骤:1.安装FTP服务2.创建FTP专用账号3.......