码迷,mamicode.com
首页 > 编程语言 > 详细

java中statement、prepareStatement的相关理解

时间:2015-05-18 13:03:57      阅读:103      评论:0      收藏:0      [点我收藏+]

标签:java statement

statement使用方法

Statement statement = connection.createStatement();
String queryString = "select username,password from user_table where username=‘" +
      username + "‘ and password=‘" + password + "‘";
ResultSet resultSet = statement.executeQuery(queryString);

statement 为非预编译语句,每次执行会去数据库 生成一条语句执行。

如果 password 变量 赋值为 ‘ or ‘‘1‘=‘1’ 则 整个语句为

select username,password from user_table where username=‘zhagnsan‘ and password=‘‘ or ‘1‘=‘1‘

 

statement会把这个字符串传给数据库进行执行,此字符串带有注入,所以输入任何信息都会 登陆成功。


prepareStatement 使用方法

 String queryString = "select username,password from user_table where username = ? "
                + "and password = ?";
 preparedStatement = connection.prepareStatement(queryString);
 preparedStatement.setString(1, username);
 preparedStatement.setString(2, password);
 resultSet = preparedStatement.executeQuery();


connection.prepareStatement(queryString); 会把语句传给数据库 生成预编译语句。

  然后username ,password 的值就会变成 两个问号的参数。输入 or ‘‘1‘=‘1‘的值只会当成第二个参数值,数据库里预编译的语句 不会把 or 当成 选择关系关键字,只会当成一个参数字符串,传进预编译的语句,这样预编译语句 可以防止注入。


并且预编译语句 不用每次执行都去生成一条执行语句,而是生成一次之后可以多次调用使用,而statement是每次都会将拼接的 String字符串 去数据库生成语句执行。


预编译prepareStatement是statement更有效率。

java中statement、prepareStatement的相关理解

标签:java statement

原文地址:http://yjm199.blog.51cto.com/4408395/1652216

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!