浅谈jdbc中parperstatement和statement的区别-亚博电竞手机版

在开始本篇文章之前,笔者先废话几句,相信在接触过jdbc内容的时候,很多读者都会接触到以下这两个对象实例:parperstatement和statement。如果你没有接触过,当然也可以继续往下学习本篇文章内容。笔者认为这两者的作用其实差不多,就是创建了一个对象然后去通过对象调用executequery方法来执行sql语句。但是,这两者还是存在着一定的差异,所以本篇文章就围绕“parperstatement和statement的区别”进行简单讲解。

1、执行sql语句的格式不同

问题描述:假设当前数据库db_blog中存在tb_user表,并且该表中存在username数据列,我们分别使用parperstatement和statement进行查询操作。

使用statement查询:

string sql = "select * from tb_user where username= '"   username   "'";   stmt = conn.createstatement();  rs = stmt.executequery(sql);

使用parperstatement查询:

string sql = "select * from tb_user where username = ?";  pstmt = conn.preparestatement(sql);  pstmt.setstring(1,username);  rs = pstmt.executequery();

对比分析:parperstatement可以很好的将sql语句中的变量分离了出来,提供了代码的可读性,并且利于代码的维护,当然笔者在这里为了方便只是用了一个参数进行举例说明,读者可能看不出有啥可提高代码的可读性啥的,但是在实际开发中,很少会根据一个参数去查询数据的。



2、执行sql的效率

preparestatement接口是statement接口的子接口,其继承了statement接口的所有功能。它主要是拿来解决我们使用statement对象多次执行同一个sql语句的效率问题的。parperstatement接口的机制是在数据库支持预编译的情况下预先将sql语句编译,当多次执行这条sql语句时,可以直接执行编译好的sql语句,这样就大大提高了程序的灵活性和执行效率。要知道sql在执行过程中编译的过程中往往会需要一定的开销的(在这里笔者可推荐读者有时间可以去深入学习mysql底层的执行过程)。



3、安全性能

使用statement会存在很大的sql注入风险,在这里笔者还是根据tb_user表进行说明。

string sql = "select * from tb_user   where username= '"   username   "' and password = '"   password   "'";   stmt = conn.createstatement();  rs = stmt.executequery(sql);

在这里读者需要注意的是,如果传递的username的值为“or 1=1 ”,那么该判断条件永远为真,则这样有点技术的人就可以进入到相关网站的后台,那么后果就可想而知了。



展开全文
内容来源于互联网和用户投稿,文章中一旦含有亚博电竞手机版的联系方式务必识别真假,本站仅做信息展示不承担任何相关责任,如有侵权或涉及法律问题请联系亚博电竞手机版删除

最新文章

网站地图