在java Web应用程序中将数据插入数据库的最佳方法是什么?

时间:2013-06-25 18:44:17

标签: java insert

方法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);  

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

2 个答案:

答案 0 :(得分:2)

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

  1. 效率更高 - 数据库可以编译和重用PreparedStatement。
  2. 安全。使用PreparedStatement时,您不必担心编码和SQL注入。
  3. 但是,我会考虑采用第三种方法 - 使用像Hibernate这样的ORM框架。

答案 1 :(得分:2)

正如Ashwin和dasblinkenlight所说,SQL注入是关注的问题。

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

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

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

有关为什么方法1最佳的次要原因,请查看this question,其中讨论了预准备语句的性能优势,并强调了防止SQL注入的重要性。