ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2022-08-19 PreparedStatement

2022-08-22 22:04:40  阅读:216  来源: 互联网

标签:语句 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
来源: https://www.cnblogs.com/YQuicksilver/p/16612714.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有