Statement 和 PreparedStatement之间的关系和区别

Statement 和 PreparedStatement之间的关系和区别关系:PreparedStatement继承自Statement,都是接口 区别:PreparedStatement可以使用占位符,是预编译的,批处理比Statement效率高表示预编译的SQL语句的对象。接口:publicinterfacePreparedStatementextendsStatement之间的继承关系SQL语句被预编译并存储在PreparedStatement对象中。然后可以使用此对象多次高效地执行该语句。注:用于设置IN参数值的设置方法(setShort

大家好,又见面了,我是你们的朋友全栈君。

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="admin";
		String password="admin";
		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();
			}
		}
	}
}	

插入之后的结果

Statement 和 PreparedStatement之间的关系和区别

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="admin";
        String password="admin";
        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();
            }
        }
    }
}

插入之后的结果:

Statement 和 PreparedStatement之间的关系和区别

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/130449.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Leetcode第一题:两数之和(3种语言)

    Leetcode第一题:两数之和(3种语言)@](这里写自定义目录标题)Leetcode第一题:两数之和给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的两个整数。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定nums=[2,7,11,15],target=9因为nums[0]+nums1=2+7=9所以返回…

    2022年6月12日
    28
  • 任正非公开信深度解读:两年怎样改变了华为?「建议收藏」

    任正非公开信深度解读:两年怎样改变了华为?「建议收藏」任正非公开信深度解读:两年怎样改变了华为?

    2022年4月21日
    52
  • ***codeigniter操作xml(Simplexml第三方扩展)

    ***codeigniter操作xml(Simplexml第三方扩展)

    2021年9月4日
    46
  • 使用postman发送http请求

    使用postman发送http请求

    2021年9月17日
    63
  • 最优化算法之粒子群算法(PSO)

    最优化算法之粒子群算法(PSO)一、粒子群算法的概念  粒子群优化算法(PSO:Particleswarmoptimization)是一种进化计算技术(evolutionarycomputation)。源于对鸟群捕食的行为研究。粒子群优化算法的基本思想:是通过群体中个体之间的协作和信息共享来寻找最优解.  PSO的优势:在于简单容易实现并且没有许多参数的调节。目前已被广泛应用于函数优化、神经网络训练、模糊系统控制…

    2022年6月10日
    32
  • Java两整数相除向上取整

    Java两整数相除向上取整前言:Java中两个整数相除,如果不能整除,默认是向下取整的。例如:11除以3的结果是3。然而,某些情况下(eg.把11个糖果,每3个分一堆,不足三个也分成一堆,可以分几堆?),我们需要向上取整,这样的情况该如果处理呢?方式一:添加三目运算符逻辑代码x/y+(x%y!=0?1:0);这种方法逻辑上很简单,如果x可以整除y,就将x/y的结果加0,不能整除y就将x/y的结果加1。方式二:使用ceil函数(int)Math.ceil((double.

    2022年6月21日
    110

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号