JDBC之statement与preparedstatement的区别

来源:互联网 发布:sql中top用法 编辑:程序博客网 时间:2024/05/21 05:43

昨天写了一篇jdbc的基本使用步骤,里面创建的sql命令发送器是statement,其实开发过程中,一般不使用这个,使用的是preparedstatment
–statement的缺点:

1.可读性差,比如登录需要字符串拼接,不直观
2.效率低下,在讲解preparedstatement时会分析这个
3.不安全,sql注入漏洞

下面我们使用statement模拟用户登录来讲解这些缺点

Class.forName("oracle.jdbc.driver.OracleDriver");Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl");Statement stmt = conn.createStatement();//模拟用户输入账号密码Scanner scanner = new Scanner(System.in);System.out.println("请输入账号:");String uname = scanner.next();System.out.println("请输入密码:");String upassword = scanner.next();//使用拼接,语句比较繁琐String sql = "select * from t_user where uname = '"+uname+"' and upassword = '"+upassword+"'";//执行sql时,如果用户在输入账号或密码时使用or拼接一个true条件,那么这个条件都为真,这种情况就叫sql注入,不知道密码账号也能登录,例如:uname = aaa' or '1 = 1  或者upassword = aaa' or '1 = 1;ResultSet rs = stmt.executeQuery(sql);if(rs.next()){//如果有下一行返回true    System.out.println("登录成功");}else{    System.out.println("登录失败");}--------------------------------还有多次执行更新或者查询,虽然语句相似但是每次都要重新编译,效率低下sql = "update ..where uid = 11";sql = "update ..where uid = 22";sql = "update ..where uid = 33";

使用preparedsatement可解决以上问题
preparedstatement:预处理,预编译;献上代码和注释一起理解它

//准备sql模板,供pstmt预编译加载到内存中String sql = "select * from t_user where uname = ? and upassword = ?";//?代表占位符,内存会根据后面我们给的数据自动补充语句//好处1,防止sql注入;2,代码明了,不需要自己拼接字符串PreparedStatement pstmt = conn.preparedStatement(sql);//上面的sql语句并未执行,只是加载到内存了预编译好了//下面就是给问号赋值pstmt.setString(1,"username");//这里1代表第一个问号,后面跟的是赋的值pstmt.setString(2,"password");//2,第二个问好,setXXX()根据表的结构选择//防注入的原理是预编译之后,preparedstatement不允许在填充数据的时候改变他的逻辑结构了ResultSet rs = pstmt.executeQuery();//这里才是真正执行SQL语句if(rs.next()){System.out.println("登录成功");}
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 感冒引起的耳朵疼怎么办 感冒了左耳朵疼怎么办 受风引起的面瘫怎么办 两边的脸不一样大怎么办 脖子扭到怎么办快速好 卡马西平片过量怎么办 天冷眼睛神经跳怎么办 每天失眠怎么办要疯了 老是失眠是怎么办才好 汗毛又多又长怎么办 脸上出油毛孔粗大黑头怎么办 毛长在皮肤里怎么办 腰韧带拉伤怎么办恢复快 脚扭伤伤了韧带怎么办 膝关节韧带拉伤怎么办恢复快 脚踝韧带拉伤怎么办恢复快 脚扭伤一年没好怎么办 脚扭伤半年还疼怎么办 脚崴过有后遗症怎么办 脚扭伤脚面肿了怎么办 腰突然扭了好痛怎么办 腰扭伤了怎么办最有效 腰扭伤了不能动怎么办 前交叉韧带增粗怎么办 膝盖前交叉韧带损伤怎么办 狗的腿肌肉拉伤怎么办 胳膊上的筋拉伤怎么办 肩周炎胳膊抬不起来怎么办 脖子上的筋拉伤怎么办 脚踝骨扭伤肿了怎么办 脚扭伤肿起来了怎么办 月经量特别少该怎么办 月经血沾床单上怎么办 月经弄到棉被上怎么办 血弄床单上干了怎么办 不小心吃了指甲怎么办 月经没有干净同房了怎么办 撞红了怎么办要吃药吗 自己长得太丑怎么办 长得丑特别自卑怎么办 手挤了有淤血怎么办