PreparedStatement和Statement关系和区别的简单概述

1.PreparedStatement

PreparedStatement是java.sql包下的一个接口同时也是Statement的子接口,作用是用来执行SQL的语句,通过connection.PreparedStatement(sql语句)的方式可以获取PreparedStatement的一个对象。在执行到这个语句的时候数据库系统会对()中sql 的语句进行预编译的处理。sql语句被编译号之后,则sql语句可以在后续的代码中重复使用。

2.Statement

Statement也是java.sql包下的一个接口,在数据库执行一次性存储的时候,使用Statement对象进行处理。其原因是因为PreparedStatement的开销比较大

3.二者的区别

①.PreparedStatement代码的可读性可维护性更佳以及代码更加安全

	// 使用Statement的弊端:需要拼写sql语句,并且存在SQL注入的问题

       //执行时在输入userName password 的时候输入以下代码即使数据库不存在此用户信息也可以登入成功
		// SELECT user,password FROM user_table WHERE USER = '1' or ' AND PASSWORD = '
		// ='1' or '1' = '1';


        //这次体现出了Statement的拼接问题 可读性差和可维护性差的问题
		String sql =
            "SELECT user,password FROM user_table WHERE USER = '" + userName + "' AND             
             PASSWORD = '" + password+ "'";

-----------------------------------------------------------------------------------------

        String sql = 
                "SELECT user , password from user_table where user=? and password =?";
        // ?是占位符 ps.setSting(第几个占位符,要赋的具体值)
        ps.conn.prepareStatement(sql);
        ps.setSting(1, **** )
        ps.setSting(2, **** )//ps是prepareStatement的一个实例
        //不存在拼接问题 而且可读性更高可维护性更佳
    }

 上述的代码可以看出Statement语句的可读性太差了,就算是自己过段时间去看都会感觉模糊。

②.PreparedStatement的效率性能更佳

PreparedStatement在DBServer会对预编译的语句提供性能的优化,因为预编译语句很可能被重复的调用,使用在语句被DBServer的编译器编译后的执行代码就会被缓存下来,下次调用的时候只要是系统的预编译语句就不需要再次编译,只需要把参数直接传入编译过的语句中就可以执行。

Statement语句中即使是系统的操作,但是因为数据内容不一样,所以语句本身就不能匹配,没有缓存的语句的意义,事实是没有数据库会对普通语句编译后的执行代码进行缓存,这样每次执行一次都要对传入的语句编译一次。

③PreparedStatement的可以实现Blob类型的写入和读取,而Statement做不到

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值