标签:预编译 insert into sql语句 注入攻击 rest exec 代码 设计
Statement
用于通用查询,能批处理
PreparedStatement
用于执行参数化查询,能批处理
什么是参数化查询?
指在设计与数据库链接并访问数据时,在需要填入数值或数据的地方,使用参数 (Parameter) 来给值,这个方法目前已被视为最有效可预防SQL注入攻击的防御方式。
而且参数化有利于代码的可读性和可维护性。
eg:
使用statement
stmt.executeUpdate(“insert into tb_name (col1,col2,col2,col4) values (‘”+var1+”’,’”+var2+”’,”+var3+”,’”+var4+”’)”);//stmt是Statement对象实例
使用PreparedStatement
perstmt = con.prepareStatement(“insert into tb_name (col1,col2,col2,col4) values (?,?,?,?)”);
perstmt.setString(1,var1);
perstmt.setString(2,var2);
perstmt.setString(3,var3);
perstmt.setString(4,var4);
perstmt.executeUpdate(); //prestmt是 PreparedStatement 对象实例
------------------------------------------------------------------------
什么时候用PreparedStatement?
多次请求推荐用PreparedStatement,数据库系统会对sql语句进行预编译处理(如果JDBC驱动支持的话),预处理语句将被预先编译好,这条预编译的sql查询语句能在将来的查询中重用,这样一来,在多次请求的情况下它比Statement对象生成的查询速度更快。
相对的,一次请求可用Statement
PreparedStatement的第一次执行消耗是很高的,假设我使用PreparedStatement的方式来执行一个针对Employee表的查询, JDBC驱动会先发送一个网络请求去解析数据、优化查询, 而当执行时会则会产生另一个网络请求。
如果使用Statement.,一个查询只会产生一次网络到数据库的通讯。
标签:预编译 insert into sql语句 注入攻击 rest exec 代码 设计
原文地址:https://www.cnblogs.com/yanze/p/10102755.html