Statement和Preparement怎么在JDBC中使用

这篇文章给大家介绍Statement和Preparement怎么在JDBC中使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

Statement对象是用来执行SQL语句的

PreparedStatement:预编译的Statement对象,是Statement的子接口。

一.性能和代码编写的简洁程度方面

它允许数据库预编译SQL语句(这些SQL语句通常有带有参数),以后每次只需改变SQL命令的参数,避免数据库每次都需要编译SQL语句,提高了性能。 e.g. 连接数据库部分

//已定义好driver、url、user、passwd等
//加载驱动
Class.forName(driver);
//获得连接
Connectionconn=DriverManager.getConnection(url,user,passwd);

Statement:

//用Connection创建一个Statement
Statementstmt=conn.createStatement(){
//100条SQL语句来插入100条记录
for(inti=0;i<100;i++){
stmt.executeUpdate("insertintostudentvalues("+"null,'aaa"+i+"',90)");
}
}

PreparedStatement:

//用Connection创建一个PreparedStatement
PreparedStatementpstmt=conn,getPreparedStatement("insertintostudent_tablevalues(null,?,90)"){
//设置参数,100次传入参数而不是100次传入SQL语句
for(inti=0;i<100;i++){
pstmt.setString(1,"姓名"+i);
//执行
pstmt.executeUpdate();
}
}

通过运行以上的代码可以发现,PreparedStatement插入100条记录所用的时间比Statement插入100条记录所花费时间少。而且可以在代码中可以看出,带有参数的SQL语句,创建Statement对象需要对参数进行拼接,但是PreparedStatement会简洁很多。

完整代码移步GitHub:Statement&PrepareStatement

运行结果:

Statement和Preparement怎么在JDBC中使用

二.安全方面

又因为PreparedStatement不需要拼接,还可以防止SQL注入从而提高安全性

注:SQL注入是一种Cracker入侵方式,从SQL语句的漏洞入侵

比如一个登录页面,我们在获取表单传来的参数,将其与数据库中的数据进行比对,比对有该账号密码时则登录成功:

Statement:

//传入参数username和passwd是提交的信息
Stringsql="select*fromusers"+"whereusername='"+username+"'andpassword='"+passwd+"';
rs=stmt.executeQuery(sql);

如果在username框中输入了:'or true or',那么,拼接后的SQL语句就变成了:

select*fromuserswhereusername=''ortrueor''anddesc='';

结果为true被SQL当成直接量那么直接会登录成功

PreparedStatement:

//传入参数username和passwd是提交的信息
PreparedStatementpstmt=conn.getPreparedStatement("select*fromuserswhereusername=?andpassword=?");
pstmt.setString(1,username);
pstmt.setString(2,passwd);

从上述可以看出PreparedStatement相较于Statement有三个好处:

  • 1. 预编译,性能较好

  • 2. 不用拼接,易编写易读懂

  • 3. 防止SQL注入,提高安全性

关于Statement和Preparement怎么在JDBC中使用就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

发布于 2021-03-26 01:49:21
收藏
分享
海报
0 条评论
167
上一篇:GeoJson和bokeh-1怎么在Python中使用 下一篇:EntityListeners注解怎么在JPA中使用
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码