JDBC系列教程之四:SQL注入PreparedStatement和Statement

2018-08-29|来源: 领悟书生

SQL注入,PreparedStatement和Statement

l  在SQL中包含特殊字符或SQL的关键字(如:' or 1 or ')时Statement将出现不可预料的结果(出现异常或查询的结果不正确),可用PreparedStatement来解决。

l  PreperedStatement(从Statement扩展而来)相对Statement的优点:

        1.没有SQL注入的问题。

        2.Statement会使数据库频繁编译SQL,可能造成数据库缓冲区溢出。

        3.数据库和驱动可以对PreperedStatement进行优化(只有在相关联的数据库连接没有关闭的情况下有效)。

static void read(String name) throws SQLException {

      Connection conn = null;

      PreparedStatement ps = null;

      ResultSet rs = null;

      try {

          // 2.建立连接

          conn = JdbcUtils.getConnection();

          // 3.创建语句

          String sql = "select id, name, money, birthday  from user where name=?";

          //预处理

          ps = conn.prepareStatement(sql);

          ps.setString(1, name);

          // 4.执行语句

          rs = ps.executeQuery();

          // 5.处理结果

          while (rs.next()) {

             System.out.println(rs.getInt("id") + "\t"

                 + rs.getString("name") + "\t" + rs.getDate("birthday")

                 + "\t" + rs.getFloat("money"));

          }

      } finally {

          JdbcUtils.free(rs, ps,  conn);

      }

   }


本文链接:SQL注入PreparedStatement和Statement,转自请注明:http://www.656463.com/article/798

相关问答

更多

java jdbc中Statement,ResultSet,PreparedStatement中各代表什么意思

区别: Statement执行一条sql就得编译一次,PrepareStatement只编译一次;常用后者原因在于参数设置非常方便;执行一条sql就得编译一次,后者只编译一次;还有就是sql放置的位置不同; 常用后者原因在于参数设置非常方便; 一般我们使用PreparedStatement代替Statement,因为: 一.代码的可读性和可维护性. 虽然用PreparedStatement来代替Statement会使代码多出几行,但这样的代码无论从可读性还是可维护性上来说.都比直接用Stateme ...

jsp操作mysql数据库实现增删改查,数据库只有两个字段,title和content。下面是我的代码,怎么写不进去?

PreparedStatement pstmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); Statement stmt = conn.createStatement(); 这个地方你是想用PreparedStatement 呢?还是想用Statement ?这两个都可以使用,你使用任何一个都可以。 但是你只是创建了这两个对象并没有执行插入数据库的动作啊,你需要调用.execute()方法来执行这条sql语句。 而且 ...

MyBatis怎么防止SQL注入

sql注入大家都不陌生,是一种常见的攻击方式,攻击者在界面的表单信息或url上输入一些奇怪的sql片段,例如“or ‘1’=’1’”这样的语句,有可能入侵参数校验不足的应用程序。所以在我们的应用中需要做一些工作,来防备这样的攻击方式。在一些安全性很高的应用中,比如银行软件,经常使用将sql语句全部替换为存储过程这样的方式,来防止sql注入,这当然是一种很安全的方式,但我们平时开发中,可能不需要这种死板的方式。 mybatis框架作为一款半自动化的持久层框架,其sql语句都要我们自己来手动编写,这个 ...

MyBatis怎么防止SQL注入

sql注入大家都不陌生,是一种常见的攻击方式,攻击者在界面的表单信息或url上输入一些奇怪的sql片段,例如“or ‘1’=’1’”这样的语句,有可能入侵参数校验不足的应用程序。所以在我们的应用中需要做一些工作,来防备这样的攻击方式。在一些安全性很高的应用中,比如银行软件,经常使用将sql语句全部替换为存储过程这样的方式,来防止sql注入,这当然是一种很安全的方式,但我们平时开发中,可能不需要这种死板的方式。 mybatis框架作为一款半自动化的持久层框架,其sql语句都要我们自己来手动编写,这个 ...

使用spring的jdbcTemplate用PreparedStatement执行sql的时候,怎么打印最终执行的sql。

  这个问题简单。首先你自己创建一个MyJdbcTemplate。继承JdbcTemplate,然后重载下面的两个方法: import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import org.springframework.dao.DataAccessException; import org.springframework.jdbc.core.JdbcTempl ...

java教程

JAVA概述
第一部分:java入门基础
第二部分:java常用类
第三部分:jdbc系列教程
第四部分:java高级特征

相关文章

更多

最近更新

更多