今天,边肖将与你分享一个关于在JDBC使用陈述和准备的解释。边肖觉得内容挺好的,现在分享给大家,很有参考价值。有需要的朋友一起看看吧。
语句对象用于执行SQL语句。
PreparedStatement:预编译的语句对象,是语句的子接口。
一.性能和代码编写的简洁程度方面
它允许数据库预编译SQL语句(这些SQL语句通常是有参数的),以后每次只需要改变SQL命令的参数,这样就避免了数据库每次都要编译SQL语句,提高了性能。例如连接数据库部分
//驱动、url、用户、passwd等。已经被定义了。
//加载驱动程序
Class.forName(驱动程序);
//获取连接
connection conn=driver manager . get connection(URL,user,passwd);
Statement:
//创建带有连接的语句
语句stmt=conn.createStatement() {
//插入100条记录的100条SQL语句
for(int I=0;i 100i ) {
stmt . execute update( insert into student values( null, aaa i ,90));
}
}
PreparedStatement:
//创建带有连接的PreparedStatement
PreparedStatement pstmt=conn,getprepared statement( insert into student _ table values(null, 90)) {
//设置参数,传入参数100次而不是SQL语句100次。
for(int I=0;i 100i ) {
Pstmt.setString(1, name I);
//执行
PS TMT . execute update();
}
}
通过运行上面的代码,可以发现PreparedStatement插入100条记录比语句插入100条记录花费的时间要少。而且在代码中可以看到,带参数的SQL语句需要拼接参数来创建语句对象,但是PreparedStatement会简单很多。
完成代码步骤github:StatementPrepareStatement
运行结果:
二.安全方面
由于PreparedStatement不需要拼接,也可以防止SQL注入,提高安全性。
注意:SQL注入是一种黑客入侵方法,从SQL语句的漏洞入侵。
例如,对于一个登录页面,我们从表单中获取参数,并将它们与数据库中的数据进行比较。当比较该帐户的密码时,登录成功:
Statement:
//传入的参数username和passwd是提交的信息
String sql=select * from users ,其中username= username ,password= passwd
RS=stmt . execute query(SQL);
如果在用户名框中输入了:或true或,则拼接的SQL语句将变为:
select * from users其中用户名=“”或true或“”,desc=“”;
如果结果为真,SQL会将其视为直接量,那么登录会直接成功。
PreparedStatement:
//传入的参数username和passwd是提交的信息
prepared statement pstmt=conn . getprepared statement( select * from users where username=?和密码=?);
pstmt.setString(1,用户名);
pstmt.setString(2,passwd);
从上面可以看出,PreparedStatement比Statement有三个优点:
1.预编译,性能良好
2.无拼接,易写易读
3.预防SQL注入和提高安全性
总结
这就是本文的全部内容。希望这篇文章的内容对你的学习或工作有一定的参考价值。谢谢你的支持。如果你想了解更多,请查看下面的相关链接。