Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Statement 和 PreparedStatement之间的关系和区别

Statement 和 PreparedStatement之间的关系和区别

作者头像
全栈程序员站长
发布于 2022-08-11 04:57:16
发布于 2022-08-11 04:57:16
1.8K00
代码可运行
举报
运行总次数:0
代码可运行

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

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

演示代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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();
			}
		}
	}
}	

插入之后的结果

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 来看一下实际使用吧:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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();
            }
        }
    }
}

插入之后的结果:

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年4月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
java学习与应用(3.6.2)--JDBC
JDBC(Java数据库连接的接口)用于统一java代码操作各种数据库。(需要实现类,是数据库厂商提供jar包完成)。 步骤为,导入jar包(可以使用idea的右键添加到库),注册驱动,获取连接对象,定义sql,获取对象,执行语句,处理结果,释放资源。 Class.forName("com.mysql.jdbc.Driver");Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db3", "root", "root"); String sql = "update account set balance = 2000 where id = 1";Statement stmt = conn.createStatement(); int count = stmt.executeUpdate(sql);System.out.println(count);stmt.close();conn.close(); DriverManager :驱动管理对象,Connection :数据库连接对象,Statement :执行sql的对象,ResultSet :结果集对象,Preparedstatement :执行sql的对象 com.mysql.jdbc.Driver类中的静态代码块,执行了注册驱动的操作(使用哪个数据库驱动jar(mysql5以后可以省略,在META-INF.service.java.sql.Driver中自动注册))。 DriverManager对象中静态方法getConnection使用格式如:jdbc:mysql://ip:端口/数据库名。(本地地址3306可以省略ip和端口)。 Connection对象中获取对象方法:createStatement( ),preparedStatement(sql),事务相关:开启: setAutoCommit(boolean autoCommit) ,提交: commit(),回滚: rollback() Statement对象,execute方法(执行任意sql),executeUpdate(执行DML语句(insert,update,delete),DDL语句(create,alter,drop)),返回影响行数(DML有)判断是否成功。executeQuery语句,执行DQL语句(select)。 实例代码:外部的变量,trycatchfinally格式,释放等。 ResultSet结果集对象,作为executeQuery的返回值,封装查询结果,其中的next方法向下移动游标,getXxx获取数据(某一列,Xxx为数据类型,可传入列编号[编号]和列名称)。一般使用while循环判断并执行。 定义抽取JDBC工具类(见代码下),用于简化代码,添加配置文件写入信息,通过静态代码块(只需要读取一次)获取properties配置信息,通过类加载器动态获取绝对路径。
嘘、小点声
2020/02/18
4460
java封装数据库操作
在 Java 中封装数据库操作是一个常见的需求,可以通过以下方法实现高效且可维护的代码结构。以下是一个 基于 JDBC 的封装示例,并附上最佳实践建议:
编程小白狼
2025/04/13
1080
Java——数据库编程JDBC之快速入门吐血总结及各关键对象详解(提供了JDBCUtils工具类)
JDBC,Java Database Connectivity,Java数据库连接,Java语言操作数据库。JDBC的本质是SUN公司定义的一套操作所有关系型数据库的规则,即接口,各数据库厂商实现这套接口,提供数据库驱动jar包,用户可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。
Winter_world
2020/09/25
5150
Java——数据库编程JDBC之快速入门吐血总结及各关键对象详解(提供了JDBCUtils工具类)
jdbc
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/dangdang jdbc.username=root jdbc.password=root
Dean0731
2020/05/08
1K0
封装jdbc、DBUtil
JDBC-util 封装了jdbc并封装dbutil方法,查询直接返回List<map<String,Object>>,将一大堆代码放在一块是真的不好看
瑾诺学长
2018/09/21
1.3K0
张晨光-JAVA零基础保姆式JDBC技术教程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ERyu1jsE-1676683410519)(assets/image-20211122171228868.png)]
张哥编程
2024/12/13
1030
张晨光-JAVA零基础保姆式JDBC技术教程
JDBC:深入理解PreparedStatement和Statement[通俗易懂]
最近听一个老师讲了公开课,在其中讲到了PreparedStatement的执行原理和Statement的区别。
全栈程序员站长
2022/07/01
1.9K1
JDBC:深入理解PreparedStatement和Statement[通俗易懂]
浅析JDBC常用的接口——JDBC的Statement接口、PreparedStatement接口
在《浅析JDBC常用的类和接口——JDBC的Driver接口、DriverManager类、Connection接口》文章中,我们介绍了使用Java语言来连接数据库。本文主要给大家介绍在Java中,通过连接数据库之后,如何来执行SQL的语句,接下来小编带大家一起来学习!
Java进阶者
2021/05/18
1.3K0
浅析JDBC常用的接口——JDBC的Statement接口、PreparedStatement接口
JavaWeb后端入门1-JDBC(Eclipse环境)
mysql驱动包为mysql-connector-java-5.1.7-bin.jar
用户6948990
2025/04/03
620
JavaWeb后端入门1-JDBC(Eclipse环境)
通过JDBC、DBUtil实现登陆的练习
项目建立步骤: 1、在src目录下建立dp.properties文件,存放配置信息
时间静止不是简史
2020/07/27
4310
通过JDBC、DBUtil实现登陆的练习
JDBC连接(Statement和PrepareStatement)「建议收藏」
(1)注册驱动 (只做一次) (2)建立连接(Connection) (3)创建执行SQL的语句(Statement) (4)执行语句 (5)处理执行结果(ResultSet) (6)释放资源
全栈程序员站长
2022/09/01
7090
【Spring实战】—— 14 传统的JDBC实现的DAO插入和读取
从这篇开始学习Spring的JDBC,为了了解Spring对于JDBC的作用,先通过JDBC传统的流程,实现一个数据库的插入和读取。 从这篇你可以了解到:   1 传统的JDBC插入和读取的过程
用户1154259
2018/01/17
7610
【Spring实战】—— 14 传统的JDBC实现的DAO插入和读取
JDBC(一)之细说JDBC
今天这一篇写的是关于JDBC的内容。之前一直在学习mysql数据库,那数据库怎么和我们的程序相互交互呢,它们之间的桥梁就是JDBC。接下来让我们直接进入正题! 一、JDBC概述 1.1、JDBC简介   JDBC全称为:Java DataBase Connectivity(java数据库连接)   JDBC是SUN公司为了简化、统一对数据库的操作,定义了一套Java操作数据库的规范。   JDBC是一组专门负责连接并操作数据库的标准,在整个JDBC 中实际上大量的提供的是接口。由数据库厂商提供,不同数据库其
用户1195962
2018/01/18
3.9K0
JDBC(一)之细说JDBC
【JDBC】JDBC API 详解 ② ( Connection 数据库连接对象 | 获取 SQL 执行对象 - 普通、预编译 SQL 语句 | 事务管理 | 开启事物 | 提交事物 | 回滚事物 )
Connection 数据库连接对象 代表了 Java 应用 与 指定的数据库 的连接会话 , 通过该会话 , 可以执行 SQL 语句 , 并返回 SQL 语句的增删查改的结果 ;
韩曙亮
2023/03/25
1.1K0
JDBC课堂笔记
张哥编程
2024/12/19
650
Java工具集-JDBCUtils
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
cwl_java
2019/12/10
1K0
时间夹缝中写文章之java-JDBC
讲真的 学了三天的积分 还不如晚上回宿舍写会代码更舒心 高数积分真的太难了 可是越难越要学,张宇老师说过 好多事情本身就是矛盾的 今天抽出来一点时间写一点jdbc吧 不然公众号就会和今天的天气一样慢慢就全是灰了 java链接mysql实现一些操作 直接上代码吧 首先Command接口类的源码 package com.imooc.hrapp.command; import java.sql.SQLException; public interface Command { public
Tom2Code
2022/04/15
2110
时间夹缝中写文章之java-JDBC
JAVA 面向对象技术免费技术教程
喝酒唱歌 人生真爽 --》雕版--》九牛二虎之力,印刷了100份; 别人不能用。
张哥编程
2024/12/13
1010
JAVA 面向对象技术免费技术教程
全面了解Java连接MySQL的基础知识,快速实现数据交互
当今互联网时代,大量的应用程序都需要使用MySQL数据库来存储和处理数据。Java作为一种广泛使用的编程语言之一,在开发Web应用程序时经常需要连接MySQL数据库进行数据操作。
默 语
2024/11/20
2130
全面了解Java连接MySQL的基础知识,快速实现数据交互
Java程序设计(高级及专题)- JDBC
execute是executeQuery和executeUpdate的综合. 通常我们没有必要使用execute方法来执行SQL语句,而是使用 executeQuery 或 executeUpdate 更适合。
全栈程序员站长
2022/08/04
5800
Java程序设计(高级及专题)- JDBC
推荐阅读
相关推荐
java学习与应用(3.6.2)--JDBC
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验