zoukankan      html  css  js  c++  java
  • Statement和PreparedStatement的区别; 什么是SQL注入,怎么防止SQL注入? (转)

    问题一:Statement和PreparedStatement的区别

      先来说说,什么是java中的Statement:Statement是java执行数据库操作的一个重要方法,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句。具体步骤:

      1.首先导入java.sql.*;这个包。

      2.然后加载驱动,创建连接,得到Connection接口的的实现对象,比如对象名叫做conn。

      3.然后再用conn对象去创建Statement的实例,方法是:Statement stmt = conn.creatStatement("SQL语句字符串");

      Statement 对象用于将 SQL 语句发送到数据库中。实际上有三种 Statement 对象,它们都作为在给定连接上执行 SQL语句的包容器:Statement、PreparedStatement(它从 Statement 继承而来)和CallableStatement(它从 PreparedStatement 继承而来)。它们都专用于发送特定类型的 SQL 语句:Statement 对象用于执行不带参数的简单 SQL 语句;PreparedStatement 对象用于执行带或不带参数的预编译 SQL 语句;CallableStatement 对象用于执行对数据库已存储过程的调用。

      综上所述,总结如下:Statement每次执行sql语句,数据库都要执行sql语句的编译,最好用于仅执行一次查询并返回结果的情形,效率高于PreparedStatement.但存在sql注入风险。PreparedStatement是预编译执行的。在执行可变参数的一条SQL时,PreparedStatement要比Statement的效率高,因为DBMS预编译一条SQL当然会比多次编译一条SQL的效率高。安全性更好,有效防止SQL注入的问题。对于多次重复执行的语句,使用Prepared

    Statement效率会更高一点。执行SQL语句是可以带参数的,并支持批量执行SQL。由于采用了Cache机制,则预编译的语句,就会放在Cache中,下次执行相同的SQL语句时,则可以直接从Cache中取出来。

    PreparedStatement pstmt  =  con.prepareStatement("UPDATE EMPLOYEES  SET name= ? WHERE ID = ?");
    pstmt.setString(1, "李四");
    pstmt.setInt(2, 1);
    pstmt. executeUpdate();

    那么CallableStatement扩展了PreparedStatement的接口,用来调用存储过程,它提供了对于输入和输出参数的支持,CallableStatement 接口还有对 PreparedStatement 接口提供的输入参数的sql查询的支持。

    PreparedStatement: 数据库会对sql语句进行预编译,下次执行相同的sql语句时,数据库端不会再进行预编译了,而直接用数据库的缓冲区,提高数据访问的效率(但尽量采用使用?号的方式传递参数),如果sql语句只执行一次,以后不再复用。
    
     从安全性上来看,PreparedStatement是通过?来传递参数的,避免了拼sql而出现sql注入的问题,所以安全性较好。
     在开发中,推荐使用 PreparedStatement

    参考博客:http://blog.csdn.net/yejin191258966/article/details/8453909

    问题二:什么是SQL注入,怎么防止SQL注入?

      所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。

      怎么防止SQL注入,使用存储过程来执行所有的查询;检查用户输入的合法性;将用户的登录名、密码等数据加密保存。

    问题三:Spring中的事务是如何配置的?Spring中的AOP实现是基于什么原理?

      先来回答第二个问题,是个开发者都知道Spring中的AOP说的是面向切面的编程。所以,再深入点,AOP的实现原理其实是Java的动态代理

      第二个问题,先来说说数据库中的事务,再来说所Spring是怎么处理数据库中的事务的。通俗的说,数据库事务就是在你需要插入1000条数据,然后再修改其中5条,删除其中3条的操作执行完毕之后的一次性提交。而在提交之前,这些变动实际上不写入数据库的。同时,里面如果有一步出错的话,所有的在这一个事务内部做过的变动都要撤销、回滚。如果未使用事务的话,对于上述操作,实际上数据库操作的次数是100+5+3次。那么,Spring对事务做了一些什么事情呢?Spring对事务做了封装,可以通过申明的方式提供事务管理,

    问题四:线程池你有使用过么?实现多线程的两种方式是什么?

    http://www.blogjava.net/robbie/archive/2009/04/05/264003.html

    http://www.cnblogs.com/RunForLove/p/4564224.html

  • 相关阅读:
    June 26th 2017 Week 26th Monday
    June 25th 2017 Week 26th Sunday
    June 24th 2017 Week 25th Saturday
    June 23rd 2017 Week 25th Friday
    June 22nd 2017 Week 25th Thursday
    2018最佳网页设计:就是要你灵感爆棚!!!
    图片素材类Web原型制作分享-Pexels
    想要打动HR的心,UX设计师求职信究竟应该怎么写?
    【UXPA大赛企业专访】Mockplus:“设计替代开发”将成为现实
    2018年最好的医疗网站设计及配色赏析
  • 原文地址:https://www.cnblogs.com/softidea/p/4564705.html
Copyright © 2011-2022 走看看