Statement 和 PreparedStatement之间的关系和区别.

关系:PreparedStatement继承自Statement,都是接口

区别:PreparedStatement可以使用占位符,是预编译的,批处理比Statement效率高

详解:

1、PreparedStatement:表示预编译的 SQL 语句的对象。

接口:public interface PreparedStatement extends Statement之间的继承关系

SQL 语句被预编译并存储在 PreparedStatement 对象中。然后可以使用此对象多次高效地执行该语句。

注:用于设置 IN 参数值的设置方法(setShort、setString 等等)必须指定与输入参数的已定义 SQL 类型兼容的类型。例如,如果 IN 参数具有 SQL 类型 INTEGER,那么应该使用 setInt 方法,问号的位置也是应该注意的,因为第一个问好的位置为1,第二个问号的位置为2.以此类推。

如果需要任意参数类型转换,使用 setObject 方法时应该将目标 SQL 类型作为其参数。

在以下设置参数的示例中,con 表示一个活动连接:

PreparedStatement pstmt = con.prepareStatement("UPDATE EMPLOYEES SALARY = ? WHERE ID = ?");

pstmt.setBigDecimal(1, 1533.00)

pstmt.setInt(2, 1102)

pstmt.execute()//注意提交时这里不能再有sql语句,不同于Statment

演示代码:

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.SQLException;

import java.sql.Statement;

public class PreparedStatementTest {

public static void main(String[] args) {

test_autoCommit();

}

public static void test_autoCommit()

{

String driver="oracle.jdbc.driver.OracleDriver";

String url="jdbc:oracle:thin:@127.0.0.1:1521:orcl";

String user="briup";

String password="briup";

Connection conn=null;

PreparedStatement ps=null;

try {

//1、注册驱动

Class.forName(driver);

//2、获取连接

conn= DriverManager.getConnection(url, user, password);

//System.out.println(conn);

//3、创建prepareStatement对象

String sql="insert into lover values(?,?,?)";

ps=conn.prepareStatement(sql);

//4、执行sql语句

ps.setInt(1,21);//代表设置给第一个?号位置的值为Int类型的21

ps.setString(2,"suwu150");//代表设置给第二个?号位置的值为String类型的suwu150

java.util.Date utilDate=new java.util.Date();//进行类型转换,由util类型的date转化为sql类型的

ps.setDate(3, new java.sql.Date(utilDate.getTime()));

//ps.execute();//执行

System.out.println(ps.execute());//执行表输出返回的结果,结果为false,因为没有返回的结果集

//5、处理结果集

} catch (Exception e) {

e.printStackTrace();

}

finally{

//6、关闭资源

try {

if(ps!=null)ps.close();

} catch (SQLException e) {

e.printStackTrace();

}

try {

if(conn!=null)conn.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

}

插入之后的结果

2、Statement:用于执行静态 SQL 语句并返回它所生成结果的对象。

接口:public interface Statement extends Wrapper

在默认情况下,同一时间每个 Statement 对象只能打开一个 ResultSet 对象。因此,如果读取一个 ResultSet 对象与另一个交叉,则这两个对象必须是由不同的 Statement 对象生成的。如果存在某个语句的打开的当前 ResultSet 对象,则 Statement 接口中的所有执行方法都会隐式关闭它。

如以下操作:创建statement对象

Statement stat=conn.createStatement();

String sql="insert into lover values(6,'suxingxing',to_date('21-9-2016','dd-mm-yyyy'))";

stat.execute(sql);//这里提交时应该有sql语句,不同于PreparedStatment

来看一下实际使用吧:

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

import java.sql.Statement;

public class StatementTest {

public static void main(String[] args) {

test_autoCommit();

}

public static void test_autoCommit()

{

String driver="oracle.jdbc.driver.OracleDriver";

String url="jdbc:oracle:thin:@127.0.0.1:1521:orcl";

String user="briup";

String password="briup";

Connection conn=null;

Statement stat=null;

try {

//1、注册驱动

Class.forName(driver);

//2、获取连接

conn= DriverManager.getConnection(url, user, password);

conn.setAutoCommit(false);

//System.out.println(conn);

//3、创建statement对象

stat=conn.createStatement();

//4、执行sql语句

String sql="insert into lover values(22,'suxingxing',to_date('21-9-2016','dd-mm-yyyy'))"; //注意格式

// stat.execute(sql);

System.out.println(stat.execute(sql)); //返回值为false,因为同样没有ResultSet返回集

conn.commit();

//5、处理结果集

} catch (Exception e) {

e.printStackTrace();

try {

conn.rollback();

} catch (SQLException e1) {

e1.printStackTrace();

}

}

finally{

//6、关闭资源

try {

if(stat!=null)stat.close();

} catch (SQLException e) {

e.printStackTrace();

}

try {

if(conn!=null)conn.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

}

插入之后的结果:

到此这篇关于java中Statement 与 PreparedStatement接口之间的关系和区别的文章就介绍到这了,更多相关Statement 与 PreparedStatement接口内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

sql语句和java的关系_java中Statement 与 PreparedStatement接口之间的关系和区别相关推荐

  1. java构造方法函数_Java中的构造方法(构造函数)与普通方法区别

    ** Java中的构造办法(构造函数)与通俗办法差别 ** 一.明白什么是构造办法,什么是通俗办法? 所谓的构造办法,是一种特别的办法,其感化是用来创建对象时初始化对象,即为对象成员变量赋初始值,老是 ...

  2. java listfiles 使用_Java中list()和listFiles()方法之间的区别

    java.io包的名为File的类表示系统中的文件或目录(路径名).为了获得目录中所有现有文件的列表,此类提供了list()和ListFiles()方法. 它们之间的主要区别是该列表()方法返回一个字 ...

  3. java treemap 内存_Java中Map、HashMap、LinkedHashMap、TreeMap的区别

    Map: Map是一个接口不能实例化,Map接口主要有两个实现类:HashMap和TreeMap类.其中,HashMap类按哈希算法来存取对象,而TreeMap类可以对键对象进行排序: Map提供了一 ...

  4. java 枚举迭代_Java中的枚举和迭代器之间的区别

    java 枚举迭代 Java中的枚举与迭代器 (Enumeration vs Iterator in Java) Here, we will see how Enumeration differs f ...

  5. java字符串字节_Java中字符串与byte数组之间的相互转换

    前言 Java与其他语言编写的程序进行tcp/ip socket通讯时,通讯内容一般都转换成byte数组型,java在字符与数组转换也是非常方便的.下面跟我一起来了解一下字符串与byte之间转换的原理 ...

  6. android类之间的关系,Android 中Activity,Window和View之间的关系

    Activity是Android应用程序的载体,允许用户在其上创建一个用户界面,并提供用户处理事件的API,如 onKeyEvent, onTouchEvent等. 并维护应用程序的生命周期.Acti ...

  7. dpi与dp的关系_Android中 dp,px,dpi三者之间的关系

    首先弄明白三个概念 dp/dip(Density-independent pixel ) 设备独立像素(是一个关联Density和pixel的虚拟像素单位) dpi (dots per inch) 每 ...

  8. 使用Hive或Impala执行SQL语句,对存储在HBase中的数据操作

    https://www.zybuluo.com/aitanjupt/note/209941 使用Hive或Impala执行SQL语句,对存储在HBase中的数据操作 〇.摘要 一.基础环境 二.数据存 ...

  9. 用SQL语句查询一个特定老师学生中男生女生各多少人

    用SQL语句查询一个指定老师学生中男生女生各多少人 一 表结构 学生表 教师表 关系表 SQL语句 结果 涉及知识 一 表结构 学生表 教师表 关系表 SQL语句 select count(case ...

最新文章

  1. axure 下拉多选 元件_Axure教程:下拉多选列表集合(多选下拉列表+单选下拉列表+分级下拉列表)...
  2. html 相对于父标签位置,css子元素如何相对父元素定位?
  3. python 的* 代表元组 和**代表字典用法
  4. AI产业智能化白皮书 | 清华x百度:全面解读AI产业化的现在和未来(附下载)...
  5. 用按位异或运算符交换两个数,不引入第三个变量
  6. csdn markdown 编辑器开启
  7. 第二节:Css重写样式
  8. 招几个兄弟和我一起做项目
  9. 苹果要悄悄对这个产品动手了?你们最期盼的NFC功能也要来?
  10. java 我爱你_Java初级教程-课程笔记
  11. Futter基础第1篇: 实现输出Hello World【MaterialApp、Scaffold】
  12. C3模块-空洞可分离卷积存在的问题及轻量化语义分割模型架构技巧
  13. 【转载】深入浅出VA函数
  14. 计算机一级报名是报ms office 吗,计算机一级考试
  15. 八数码 详解(C++)
  16. iPhone 苹果手机尺寸大全
  17. 服务器性能差用cdn有用吗,CDN加速有用吗?对网站有什么好处?
  18. MNE从头创建raw结构
  19. 机器学习训练营--快来一起挖掘幸福感吧
  20. 雨水全自动浮动床过滤器

热门文章

  1. 【Flink】Flink 1.9 版本 web UI 突然没有日志
  2. 【java】java 一个线程占用多少内存
  3. 【es】使用ElasticSearch的44条建议 性能优化
  4. JavaCC报错:ERROR: Second call to constructor of static parser
  5. 95-230-020-源码-WordCount走读-获取StreamGraph的过程
  6. ajax中html的属性,jQuery Ajax加载html数据正常,但属性似乎'不可读'
  7. Java中Comparable和Comparator接口的区别
  8. 面试被问,一千万个整数里面快速查找某个整数,你会怎么去做?
  9. 定义与声明c语言,c语言定义与声明.ppt
  10. 使用markdown编辑器(自用,没内容。。)