java statement 参数_java中statement、prepareStatement的相关理解

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更有效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值