1

方法1:

Connection connection=Connector.getConnection();
PreparedStatement ps1=connection.prepareStatement("insert into tbl_invtry(part_id,part_name)
                                                  values(?,?,)");
ps1.setString(1,action.getPart_id());
ps1.setString(2,action.getPart_name());

方法2

DAO dao = new DAOImpl(); //DB connection
String query="insert into tbl_entrp_proj(ASPECT_SRC_ID,PRNT_PROJ_ID)values('" + 
                                         project.getASPECT_SRC_ID() + "','" + 
                                         project.getPRNT_PROJ_ID() + "')";
boolean b = dao.insertQuery(query);  

请建议哪个是最好的,以及为什么。提前致谢。

4

2 回答 2

2

我会选择第一种方法,因为:

  1. 它更高效 - PreparedStatement 可以被数据库编译和重用。
  2. 安全。使用 PreparedStatement 时,无需担心编码和 SQL 注入。

但是,我会考虑第三种方法 - 使用像 Hibernate 这样的 ORM 框架。

于 2013-06-25T18:52:50.947 回答
2

正如 Ashwin 和 dasblinkenlight 所说,SQL 注入是一个问题。

在方法 1 中,您使用参数化查询来转义任何用户输入以防止 SQL 注入,在方法 2 中,您信任用户提供直接插入数据库的值。

请记住,SQL 注入语句在插入时可能不是问题,但在选择(或其他查询)时可能会破坏您的数据和数据库。

由于这些原因,不使用方法一充其量是不负责任的,最坏的情况是灾难性的。

关于为什么方法 1 最好的第二个原因,请查看这个问题,该问题讨论了准备好的语句的性能优势,并强调了防止 SQL 注入的重要性。

于 2013-06-25T18:53:55.027 回答