java-preparedstatement为什么比statement安全

问题描述

preparedstatement为什么比statement安全

preparedstatement对sql语句进行预编译,所以安全,而statement可能会有恶意sql语句的情况,就是检查登录username userpassword后跟 or 1=1这样的恶意sql语句,请问这个预编译为什么安全

解决方案

预编译不是拼接字符串,所以没有sql注入的风险。拼接sql的问题是,你的参数和sql语句体本身分不出来。如果username是

 abc' or '1' = '1

拼接上你外面的sql,就构成了一个含义不同的sql语句。

而preparedstatement直接把参数代入编译,而不是让数据库去解析sql中的参数,就没有这个问题。

解决方案二:

因为后者在编写SQL语句的时候会牵涉到引号的问题,导致很容易出错,而前者只需要对应好占位符,最后更新就可以了,简单,方便,又安全。希望能帮到你

解决方案三:

preparedStatement和Statement
PreparedStatement 和 Statement
preparedStatement和Statement 有什么不一样

时间: 2024-10-31 20:23:24

java-preparedstatement为什么比statement安全的相关文章

详解Java的JDBC中Statement与PreparedStatement对象_java

一旦获得一个连接,我们可以与数据库进行交互.在JDBC Statement, CallableStatement 和 PreparedStatement 接口定义的方法和属性,使可以发送SQL或PL/SQL命令和从数据库接收数据. 它们还定义方法,帮助Java和数据库使用SQL数据类型之间转换数据的差异. 下表提供了每个接口的用途概要,了解决定使用哪个接口 Statement 对象: 创建Statement对象在可以使用Statement对象执行SQL语句,需要使用Connection对象的cr

Java的JDBC中Statement与CallableStatement对象实例_java

JDBC Statement对象实例以下是利用以下三种查询以及打开和关闭说明的例子: boolean execute(String SQL) : 返回一个布尔值true,如果ResultSet对象可以被检索,否则返回false.使用这个方法来执行SQL DDL语句,或当需要使用真正的动态SQL. int executeUpdate(String SQL) : 返回受影响的SQL语句执行的行数.使用此方法来执行,而希望得到一些受影响的行的SQL语句 - 例如,INSERT,UPDATE或DELET

java中Statement和PreparedStatement区别与用法对比

1.PreparedStatement是预编译的,对于批量处理可以大大提高效率. 也叫JDBC存储过程 2.使用 Statement 对象.在对数据库只执行一次性存取的时侯,用 Statement 对象进行处理.PreparedStatement 对象的开销比Statement大,对于一次性操作并不会带来额外的好处. 3.statement每次执行sql语句,相关数据库都要执行sql语句的编译,preparedstatement是预编译得,   preparedstatement支持批处理 Co

Statement和PreparedStatement的区别; 什么是SQL注入,怎么防止SQL注入? (转)

  问题一:Statement和PreparedStatement的区别 先来说说,什么是java中的Statement:Statement是java执行数据库操作的一个重要方法,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句.具体步骤: 1.首先导入java.sql.*:这个包. 2.然后加载驱动,创建连接,得到Connection接口的的实现对象,比如对象名叫做conn. 3.然后再用conn对象去创建Statement的实例,方法是:Statement stmt = co

JDBC中的Statement和PreparedStatement的区别

以Oracle为例吧 Statement为一条Sql语句生成执行计划, 如果要执行两条sql语句select colume from table where colume=1; select colume from table where colume=2; 会生成两个执行计划 一千个查询就生成一千个执行计划! PreparedStatement用于使用绑定变量重用执行计划select colume from table where colume=:x; 通过set不同数据只需要生成一次执行计划

JDBC基础教程之PreparedStatement

概述 该 PreparedStatement 接口继承 Statement,并与之在两方面有所不同: PreparedStatement 实例包含已编译的 SQL 语句.这就是使语句"准备好".包含于 PreparedStatement 对象中的 SQL 语句可具有一个或多个 IN 参数.IN参数的值在 SQL 语句创建时未被指定.相反的,该语句为每个 IN 参数保留一个问号("?")作为占位符.每个问号的值必须在该语句执行之前,通过适当的setXXX 方法来提供.

JAVA拾遗录

本系列博文主要收录Java中一些常见的但是平常又容易忘记.记错或者记混的知识点的集合.各个知识点之间没有必然的联系,可以随意跳着看,希望能够对各位同学有所帮助. 本博文持续更新.修改,转载请保留原文链接. 1. JAVA堆和栈的区别 堆和栈都是内存的一部分,有着不同的作用,而且一个程序需要在这片区域上分配内存.众所周知,所有的JAVA程序都运行在JVM上,这里所说的自然是JVM中的堆和栈. 最主要的区别就是栈内存用来存储局部变量和方法调用.而堆内存用来存储Java中的对象.无论是成员变量,局部变

JDBC与JAVA数据库编程

一.JDBC的概念 1. JDBC (Java DataBase Connectivity) Java数据库连接 a) 主要提供java数据库应用程序的API支持   2. JDBC的主要功能 a) 创建和管理与数据源的连接 b) 发送SQL数据命令到数据源 c) 提取并处理由数据源返回的结果集   3. JDBC可分为两层 a) 驱动程序管理接口 b) JDBC API   4. Java.sql包中定义的常用基本的JDBC API a) 类DriverManager:管理一组JDBC驱动程序

JDBC中PreparedStatement接口的使用

  在<java使用JDBC连接MySql数据库>中说明了JDBC链接数据库的基本方式,其中执行SQL语句使用的是Statement接口,这里介绍一个更好用的接口,PreparedStantment接口. PreparedStatement是什么? public interface PreparedStatement extends Statement 使用方法: Class.forName("com.mysql.jdbc.Driver"); Connection conn

[JAVA软件工程师-面试宝典-2013最新版]

[JAVA面试宝典-2013最新版] 一. Java基础部分......................................................................................................2 1.一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?.....2 2.Java有没有goto?....................................................