【JAVA基础 】- 深入理解Statement和PrepateStatement

简介: 【JAVA基础 】- 深入理解Statement和PrepateStatement

Java中PrepateStatement是Statement的一个子接口,它是Java JDBC FrameWork的一部分。它用于对数据库执行分类操作;PreparedStatement支持参数化查询,因此被认为更安全。 PreparedStatement还可以防止SQL注入攻击;可以通过调用Connection的prepareStatement(String query)方法来获得PreparedStatement的实例。

  • 关于PreparedStatement:
  1. PreparedStatement是Statement的子接口,作用与Statement一样;
  2. PreparedStatement特点:
    使用PreparedStatement可以执行动态参数化sql(在sql语句中用占位符?)
  3. PreparedStatement原理:
    在我们调用创建PreparedStatement 对象 pstm时候,我们需要将一个半成品sql语句交给pstm,pstm拿着这个sql先发送到数据库,进行预编译(检查语法,检查权限),当我们调用pstm.setXXX()的时候,再一起把占位符设置的动态参数值一起发送到数据库执行,不用再编译当前的sql语句,这样可以大大的节省时间,提高运行效率。
  • Statement与PrepareStatement的区别
  1. 使用statement执行sql语句,是以字符串拼接的方式,给sql语句加入参数,这个时候存在sql注入危险;
  2. 使用PreparedStatement 可以避免sql注入(安全)
  3. 使用PreparedStatement,代码的可读性高,可维护性好,可以提高运行效率。
  • 什么是SQL注入
    SQL注入(SQL Injection)是一种常见的Web安全漏洞,形成主要原因是Web应用程序在接收相关数据参数时未做好过滤,将其直接带入到数据库中查询,导致攻击者可以拼接构造的SQL语句。

注入产生的原因是后台服务器在接收前端相关参数时未做好过滤直接带入到数据库中查询,导致可以拼接执行SQL语句。

  • SQL注入危害
  • 数据库信息泄露:数据库中存放的用户隐私信息的泄露。
  • 网页篡改:通过操作数据库对特定网页进行篡改。
  • 网站被挂木马,传播恶意软件:修改数据库一些字段值,嵌入木马连接,进行挂马攻击。
  • 数据库被恶意操作:数据库被攻击且数据库的系统管理员账户被篡改。
  • 服务器被远程控制,被安装后面。
  • 破坏硬盘数据,偏瘫整个应用系统。
  • 防范SQL注入解决SQL注入问题的关键是对所有可能来自用户输入的数据进行严格的检查,对数据库配置使用最小权限原则。代码层:
  • 对输入进行严格的转义和过滤
  • 使用参数化(Parameterized)
  • PDO预处理
  • 网络层:
  • 通过WAF设备启用防SQL Inject注入策略
  • 云端防护
目录
相关文章
|
SQL 关系型数据库 MySQL
java.sql.SQLException: No operations allowed after statement closed.
java.sql.SQLException: No operations allowed after statement closed.
1238 0
|
SQL 分布式计算 Hadoop
【已解决[ERROR] Could not execute SQL statement. Reason:java.lang.ClassNotFoundException: org.apache.had
【已解决[ERROR] Could not execute SQL statement. Reason:java.lang.ClassNotFoundException: org.apache.had
1039 0
|
XML 数据格式
java.beans.* 篇(2)Expression,Statement,Encoder,XmlEncoder,XmlDecoder使用案例
java.beans.* 篇(2)Expression,Statement,Encoder,XmlEncoder,XmlDecoder使用案例
java.beans.* 篇(2)Expression,Statement,Encoder,XmlEncoder,XmlDecoder使用案例
|
Java 关系型数据库 MySQL
java.sql.SQLException: No operations allowed after statement closed.
java.sql.SQLException: No operations allowed after statement closed. 原因很简单:这里和数据库的连接Connection是一个Static的,程序共享这一个Connection。
18657 0
|
SQL Java 关系型数据库
Java -- JDBC 学习--通过Statement进行数据库更新操作
通过 JDBC 向指定的数据表中插入一条记录. 1. Statement: 用于执行 SQL 语句的对象   1). 通过 Connection 的 createStatement() 方法来获取   2). 通过 executeUpdate(sql) 可以执行 SQL 语句.   3). 传入的 SQL 可以是 INSRET, UPDATE 或 DELETE. 但不能是 SELECT 2. Connection、Statement 都是应用程序和数据库服务器的连接资源. 使用后一定要关闭。
1411 0