JDBC详解(二)

一:Statement与PreparedStatement的注意点

  

 

  存在sql注入的危险,如果用户传入的id为“2 or 1=1”,将删除表中的所有数据。而PreparedStatement有效的防止sql注入(SQl语句在程序运行前已经进行了预编译,当运行时动态的把参数传给PreparedStatement时,及时参数里有敏感字符如:“or 1=1”,数据库也会作为一个字段的属性值来处理而不会作为一个SQL指令):

二:批处理(Batch)

  

  对于大量的批处理,建议使用Statement,因为PreparedStatement的预编译空间有限,当数据量特别大时,会发生异常。(测试结果:2万条数据插入,大概需要2秒半的时间)

三:JDBC事务

   JDBC的事务默认是自动提交的:

  

  代码没有截图完整,在最后的finally中关闭连接没有截图。此段程序会报错:

  

  报错是因为第二次插入参数设置不对。从控制台看到“第一次插入”打印出来了,是不是第一次的插入成功了呢?然而并没有,因为我没手动这只了自动提交事务为false,所以第一次插入和第二次插入是同一个事务。而第二次显然报错了,说明没有执行成功,所以第一次插入也是没有将数据真的插入到数据库的。如果我们将“1”出的代码注释掉,那么第一次插入输入真的插进去呢?答案是真的插入进去了。因为JDBC事务默认是自动提交事务的,所以如果将“1”处的代码注释掉,那么虽然第二次插入报错了,第二次没有插入成功,但是第一次还真的是插入成功了。

posted @ 2017-09-08 18:11  夏日树叶  阅读(223)  评论(0编辑  收藏  举报