网上很多都说区别是PrepareStatement可以批处理。实际上二者都是可以进行批处理的。

区别在于:
1.PrepareStatement要求预编译的sql必须是格式固定,使用占位符获取参数。
   效率比较高,防sql注入,安全性较高。
2.Statement对sql格式并无要求,因此比较灵活。但是PrepareStatement效率更高。
 
什么叫做防sql注入?
密码输入1' or '1'='1
String sql = " select * from 用户表 where username='name' and pass='1' or '1'='1'";
我们会发现如何输入什么都是可以查询到信息,这样不安全。
但是PrepareStatement不会
String sql = " select * from 用户表 where username='name' and pass='1' or '1'='1''";
 

Connection conn = DBPool. getConnection();
conn.setAutoCommit( false );
sql = " update 客户渠道静态表 set col_1_1_4_48=?, col_1_1_4_47=?," +
" col_1_1_4_49='"+User_Name+"',col_1_1_4_50=sysdate" +
" where col_1_1_4_1=?";
PreparedStatement ps = conn.prepareStatement(sql);
for(int i = 1 ; i < sheet.getLastRowNum ()+1 ; i++ ){
HSSFRow row = sheet.getRow(i);
ps.setString(1, row.getCell(12).getStringCellValue());
ps.setString(2, row.getCell(13).getStringCellValue());
ps.setString(3, row.getCell(0).getStringCellValue());
ps.addBatch();
}
ps.executeBatch();
conn.commit();
conn.close();

PreparedStatement

Connection conn = DBPool. getConnection();
conn.setAutoCommit( false );
Statement stamt = conn.createStatement();
for(int i = 1 ; i < sheet.getLastRowNum()+1 ; i++ ){
HSSFRow row = sheet.getRow(i);
sql = " update 客户渠道静态表 set col_1_1_4_48='"+row.getCell(12).getStringCellValue()+ "'," +
" col_1_1_4_47='"+row.getCell(13).getStringCellValue()+ "'," +
" col_1_1_4_49='"+User_Name+"',col_1_1_4_50=sysdate" +
" where col_1_1_4_1='"+row.getCell(0).getStringCellValue()+ "'";
stamt.addBatch( sql);
}
stamt.executeBatch();
conn.commit();
conn.close();

Statement

Statement和PrepareStatement区别的更多相关文章

  1. statement 、prepareStatement的用法和解释

    转自:http://blog.csdn.net/QH_JAVA/article/details/48245945   一.prepareStatement 的用法和解释 1.PreparedState ...

  2. Java基础——Statement与PrepareStatement

    Statement Statement是Java运行数据库操作的一个重要方法.用于在已经建立数据库连接的基础上.向数据库发送要运行的SQL语句.Statement对象,用于运行不带參数的简单SQL语句 ...

  3. (面试)Statement和PrepareStatement有什么区别

    (1)Statement用于执行静态sql语句,在执行时,必须指定一个事先准备好的sql语句.PrepareStatement是预编译的sql语句对象,sql语句被预编译并保存在对象中.被封装的sql ...

  4. Java Statement PK PrepareStatement

    PreparedStatement是用来执行SQL查询语句的API之一,Java提供了 Statement.PreparedStatement 和 CallableStatement三种方式来执行查询 ...

  5. Statement与PreparedStatement区别

    1.性能区别 Statement statement = conn.createStatement(); PreparedStatement preStatement = conn.prepareSt ...

  6. Java中PreparedStatement和Statement的用法区别(转)

    1. PreparedStatement接口继承Statement, PreparedStatement 实例包含已编译的 SQL 语句,所以其执行速度要快于 Statement 对象.   2.作为 ...

  7. jdbc preparestatement和preparestatement区别

    1.preparestatement预编译,预编译指的是DB的编译器,会对此sql语句提前编译.然后将预编译的结果缓存到数据库中,下次执行时替换参数直接执行编译过的语句. 记住:数据库也是有编译器的, ...

  8. Statement 与 PreparedStatement 区别

    Statement由方法createStatement()创建,该对象用于发送简单的SQL语句 PreparedStatement由方法prepareStatement()创建,该对象用于发送带有一个 ...

  9. Java实习生面试题分享

    1.Java有那些基本数据类型,String是不是基本数据类型,他们有何区别. Java语言提供了八种基本类型: 六种数字类型(四个整数型,两个浮点型) 字节型byte 8位 短整型short 16位 ...

随机推荐

  1. plsql修改表字段alter

    场景:在生产过程中有时候需要不同的环境中修改表字段,使用sql语句比较方便! 1 演示 --添加字段的语法 alter table tablename add (column datatype [de ...

  2. 【基础网络】TCP与UDP 的区别

    TCP协议与UDP协议的区别    首先咱们弄清楚,TCP协议和UCP协议与TCP/IP协议的联系,很多人犯糊涂了,一直都是说TCP/IP协议与UDP协议的区别,我觉得这是没有从本质上弄清楚网络通信! ...

  3. java多线程系列(四)---Lock的使用

    Lock的使用 前言:本系列将从零开始讲解java多线程相关的技术,内容参考于<java多线程核心技术>与<java并发编程实战>等相关资料,希望站在巨人的肩膀上,再通过我的理 ...

  4. ICMP--ping--Traceroute

    ICMP经常被认为是IP层的一个组成部分.它传递差错报文以及其他需要注意的信息. ICMP报文通常被IP层或更高层协议TCP或UDP使用. 一些ICMP报文把差错报文返回给用户进程   ICMP报文是 ...

  5. 使用gitLab 或 github 关联本地仓库

    要先在git里面注册自己的邮箱 然后: git commit -m 是为本次提交命名 刷新gitLab 发现更新了

  6. 11. leetcode 283. Move Zeroes

    Given an array nums, write a function to move all 0's to the end of it while maintaining the relativ ...

  7. Presto向分区表快速插入数据时出现'target directory already exists'的原因

    因为项目使用Presto作为ETL使用,需要将关系库中的数据导入到Hive中.目前关系库中的数据每天导入一次,在Hive中以天为间隔创建新的分区.思路是正确的,但是在使用的过程中,发现将少量关系库中的 ...

  8. SpringBoot实战总汇--详解

    简介 Spring 诞生时是 Java 企业版(Java Enterprise Edition,JEE,也称 J2EE)的 轻量级代替品.无需开发重量级的 Enterprise JavaBean(EJ ...

  9. Presto0.157版本单节点部署教程

    因为Presto版本的更新速度较快,所以最好按照对应版本的教程进行部署,博主之前看错了版本号,拿0.100版本的教程来部署0.157版本,结果导致部署失败. 官网:https://prestodb.i ...

  10. 喂,前端,你应该知道的chrome插件

    最近,优点闲. 压力,有点大,回顾,曾今被问,你怎么查看内存泄露,然后,一脸蒙. 工欲善其事, 必先利其器 最近在研究chrome devtools,发现,其实他很强.而且chrome6周一次的更新, ...