JDBC Statement,PreparedStatement和CallableStatement的使用

JAVA-21-JDBC讲解,Driver、Connection、Statement、PreparedStatement、CallableStatement、ResultSet 之前操作mysql数据库: 1)使用mysql客户端工具 2)使用客户端连接mysql服务器 3)发送sql语句到mysql服务器,执行 那么什么是JDBC呢? 使用java程序发送sql语句到数据库服务器端执行,这就用到了JDBC技术!jdbc是Oracle-Sun公司设计的一套专门用于java程序操作数据库的接口。 阅读详情

Statement系列接口用于将用户创建的sql语句提交到数据库执行,除了执行存储过程外,一些接口方法还接收参数。

如何选择使用哪种类型Statement?


* **Statement**对于固定的sql语句很有用,Statement不能接收参数。
  • PreparedStatement适用于需要多次进行调用的sql语句和多个参数的情况,PreparedStatement可以接收参数。使用PreparedStatement好处多多。比如:防SQL攻击、提高代码的可读性、可维护性、提高效率!

  • CallableStatement用于访问数据库的存储过程,CallableStatement也可以接收参数。存储过程的优点:执行效率很快(因为在数据库服务端执行的)。缺点:移植性差(不同数据库的存储过程是不可移植的)。

Statement的使用

1.创建Statement对象

Statement stmt=conn.creatStatement();

2.Statement常用方法

  • boolean execute(String sql) 返回boolean类型,在执行sql语句后,如果ResultSet检索到,则返回true,否则返回false。
  • int executeUpdate(String sql) 返回int类型,方法用于执行sql语句,将返回sql语句影响的行数。
  • ResultSet executeQuery(String sql) 执行sql语句,将返回结果集。用ResultSet实例化 result去接收返回集。

3.关闭

stmt.close(); 关闭并释放资源。

PreparedStatement的使用

1.使用PreparedStatement插入数据实例

 ...//连接数据库
String sql="insert into userInfo(username.password,gender,age) value(?,?,?,?)";
 //可以传入参数
PreparedStatement ps=conn.prepareStatement(String sql);
//调用setXXX系列方法给问号赋值,下标从1开始,代表第一个问号
ps.setString(1,"name");
ps.setInt(2,123456);
ps.setString(3,"男");
ps.setInt(4,25);
//执行插入
ps.executeUpdate();
ps.close();
conn.close();

2.常用方法:
根据一般的使用习惯

  • **boolean execute();**在进行数据库或表的创建删除操作时使用。(不传入参数)
  • ResultSet executeQuery(); 数据查询时使用。(不传入参数)
  • int executeUpdate(); 数据的插入删除、修改时使用。(不传入参数)

比如要查询信息得到结果集可以这样写: ResultSet rs=ps.executeQuery(); (这里不传入参数)

2.关闭

ps.close(); 关闭并释放资源。

CallableStatement的使用

1.创建一个CallableStatement

1.1 存储过程存在的三种参数:IN OUT INOUT

  • IN 创建SQL语句时其参数值是未知的。 使用**setXXX()**方法将值绑定到IN参数。
  • OUT 由SQL语句返回的参数值。可以使用**getXXX()**方法从OUT参数中检索值。
  • INOUT 提供输入和输出值的参数。使用**setXXX()方法绑定变量并使用getXXX()**方法检索值。

1.2 如果存储过程只是IN

String sql="{call getEmpName (?, ?)}";
//conn.prepareCall() 与conn.preparedStatement()功能一样
CallableStatement cstmt=conn.prepareCall(sql);
cstmt.setString(1,"aaa");
cstmt.setInt(2,123);
//发送参数,所有调用存储过程的sql语句都是使用executeQuery方法执行。
ResultSet rs=cstmt.executeQuery();

1.3 如果存储过程是INOUT

 //第一个?是输入参数,第二个?是输出参数
 String sql = "CALL pro_test2(?,?)";
 CallableStatement cstmt=conn.preparecall(sql);
 //设置输入参数
 cstmt=setInt(1,5);
 //设置输出参数,用registerOutParameter绑定
 cstmt.registerOutParameter(2,java.sql.Types.VARCHAR);
 //执行
 cstmt.executeQuery();
 //根据?位置取得数据getXXX()方法只用于存储过程
 String rs=cstmt.getString(2);

1.4 关闭CallableStatement

cstmt.close();

JDBC中Statement、PreparedStatement与CallableStatement详解 JDBC作为Java连接数据库的标准API,其核心是通过Statement接口执行SQL操作。Statement是最基础的执行方式,但存在SQL注入风险和性能问题。PreparedStatement通过预编译机制和参数化查询解决了这些问题,大幅提升安全性和性能,特别适合动态SQL和批量操作。CallableStatement则专门用于调用数据库存储过程,支持IN/OUT参数处理。在实际开发中,应根据场景选择合适的接口:静态SQL使用Statement,业务数据处理使用PreparedStatement,复杂 阅读详情

相关推荐

JDBC中Statement、PreparedStatement 、CallableStatement 区别和联系

Statement、PreparedStatement 、CallableStatement 区别和联系 1. Statement、PreparedStatement和CallableStatement都是接口(interface)。 2. Statement继承自Wrapper、PreparedStatement继承自Statement、CallableStatement继承自Prepare...

mween的博客 372

对于 PreparedStatement 或 CallableStatement,方法 executeQuery() 不能带有参数

对于 PreparedStatement 或 CallableStatement,方法 executeQuery() 不能带有参数 今天在学习JDBC过程中,运行在运用PreparedStatement中的executeQuery方法一直报错。 代码如下 import java.sql.*; class Demo5{ static final String URL = "jdbc:sqlserver://localhost:1433;DatabaseName=测试"; static

ECIFICS的博客 2099

CentOS7上装不了最新Chrome?别折腾依赖了,试试这个老版本安装法(附103.0.5060.24 beta下载地址)

本文提供了在CentOS7上安装兼容版Chrome的详细指南,解决了因GLIBC版本限制导致的最新版Chrome无法安装的问题。推荐使用Chrome 103.0.5060.24 beta版本,并附有下载地址和完整安装步骤,包括禁用自动更新和配套工具安装,确保系统稳定性和功能完整性。

weixin_29289821的博客 567

java报错不带有参数_对于 PreparedStatement ,executeQuery() 不能带有参数的错误

public ResultSet executeQuery(String sql){ResultSet result=null;ResultSet rs=null;PreparedStatement pst=null;try {pst=con.prepareStatement(sql);if(sqlValues!=null&&sqlValues.size()>0){ //当...

weixin_35955473的博客 1191

硬件基础(4):(6)高精度ADC设计中模拟地与数字地的划分与连接

在实际 PCB 设计中,**接地与布线**对于获得干净的参考电压和高精度 ADC 测量至关重要。下面详细阐述**如何在硬件层面减少数字噪声耦合到模拟电路、保障参考电压的稳定性**。

FCZlll的博客 2643

SpringBoot实战(二十八)集成 Collabora Online 实现在线编辑

SpringBoot实战(二十八)集成 Collabora Online 实现在线编辑

ACGkaka的博客 6983

PreparedStatement 或 CallableStatement,方法不能带有参数

对于 PreparedStatement 或 CallableStatement,方法不能带有参数继承了Statement接口中所有方法的PreparedStatement接口都有自己的executeQuery,executeUpdate和execute方法。Statement对象本身不包含SQL语句,因而必须给Statement.execute方法提供SQL语句作为参数。Prepared

shaofei的记事本 1万+

「点燃我,温暖你」用Python制作一个动态爱心效果

最近「点燃我,温暖你」这部剧非常火,讲述的是程序员的爱情故事。其中陈飞宇饰演的男主李峋,在剧中用程序做出的爱心跳动效果,非常炫。

Modeler_xiaoyu的博客 1万+

PreparedStatement的基本介绍与使用

1.PreparedStatement执行的SQL语句中的参数用?表示,调用PreparedStatement对象的setXxx()方法设置这些参数。setXxx()有两个参数,第一个参数是要设置SQL语句中的参数的索引从1开始,第二个是设置的SQL语句中的参数的值例如:2.调用,返回ResultSet对象3.调用,执行更新,包括增删改查。

薯条和番茄酱的博客 3785

STM32笔记:高精度脉冲宽度计 双输入捕获+DMA方式

本文介绍如何用STM32F107VC实现高精度的脉冲宽度计(测量周期脉冲的占空比)。 采用定时器的外部输入捕获功能,双输入+DMA方式,追求硬件的极限表现。

st01lsp的专栏 5287

obisidian插件之【templater】模板的中文说明书

Templater 是一种模板语言,可让您将变量和函数结果插入到笔记中。它还允许您执行操作这些变量和函数的 JavaScript 代码。使用 Templater,您将能够创建强大的模板来自动执行手动任务。

m0_55795604的博客 1万+

Java——对Statement、PreparedStatement、CallableStatement的理解

Statement 对象用于将SQL语句发送到数据库中。 有三种Statement对象:   Statement、 PreparedStatement、 CallableStatements 它们三者之间的关系  都是接口; PreparedStatement是从Statement继承而来 CallableStatement是从PreparedStatement继承而来 它们都作为在给...

CCblibo的博客 776

大语言模型的三种主要架构 Decoder-Only、Encoder-Only、Encoder-Decoder

f基于 Transformer 模型以非灰色显示:decoder-only 模型在蓝色分支,encoder-only 模型在粉色分支,encoder-decoder 模型在绿色分支。模型在时间线上的垂直位置表示它们的发布日期。开源模型由实心方块表示,而闭源模型由空心方块表示。右下角的堆积条形图显示了各公司和机构的模型数量。从时间轴上,我们可以看到:2021年前,当 OpenAI 决定在,他们实际上是在逆流而上。

u010899985的博客 2万+

JDBC: Statement、PreparedStatement和CallableStatement

JDBC: Statement(接口)      | PreparedStatement(接口)      | CallableStatement(接口) 以上三者为继承关系。 1).概念: Statement:(用于执行不带参数的简单 SQL 语句)     每次执行sql语句,数据库都要执行sql语句的编译,最好用于仅执行一次查询并返回结果的情形,效率高于PreparedSt

xiaodanjava的专栏 9558

Halcon VariableInspect (变量检查拓展)安装指南

网址2;

T 963

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

JDBC——Connection,Statement,PreparedStatement,CallableStatement

一、Connection[接口]1. 打开一个连接创建与数据库的连接的标准方式是在DataSource或DriverManager上调用方法getConnection()。Driver方法connect使用URL来建立连接。用户可以设置JDBC管理层,然后直接调用Driver方法。在两个驱动程序连接到一个数据库,而用户想明确地选择一个特定的驱动程序时,这是很有用的,尽管这种情况很少见。

oswin_jiang的专栏 1万+

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

JDBC中的Statement,PreparedStatement和CallableStatement

一旦获得连接,我们就可以与数据库进行交互。JDBC Statement、 CallableStatement 和 PreparedStatement 接口定义了方法和属性,这些方法和属性使您能够发送 SQL 命令并从数据库接收数据。它们还定义了有助于弥合数据库中使用的 Java 和 SQL 数据类型之间的数据类型差异的方法。下表总结了每个接口的用途,以决定要使用的接口。

weixin_62458944的博客 910

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

JDBC中Statement、PreparedStatement 和 CallableStatement的区别

A、JDBC提供了Statement、PreparedStatement 和 CallableStatement三种方式来执行查询语句,其中 Statement 用于通用查询, PreparedStatement 用于执行参数化查询,而 CallableStatement则是用于存储过程B、Statement继承自Wrapper,PreparedStatement继承自Statement,Call...

小喵的博客 1429

JDBC中Statement、PreparedStatement和CallableStatement的使用

一、JDBC相关操作的接口和类 (一)JDBC相关操作的接口和类在java.sql包中: 1、Statement、PreparedStatement和CallableStatement都是接口(interface)。 (二)Statement 1、Statement继承自Wrapper,Statement接口提供了执行语句和获取结果的基本方法; 2、支持普通的不带参的查询SQL; ...

qq30211478的博客 662

JDBC:Statement,PreparedStatement,CallableStatement的区别

JDBC: Statement(接口)      | PreparedStatement(接口)      | CallableStatement(接口) 以上三者为继承关系。 1).概念: Statement:(用于执行不带参数的简单 SQL 语句)     每次执行sql语句,数据库都要执行sql语句的编译,最好用于仅执行一次查询并返回结果的情形,效率高于Prepar

morningsun1990的专栏 1201

jdbc之Statement、 PreparedStatement、 CallableStatement三者举例与区别

JDBC Statement、 PreparedStatement、 CallableStatement三者举例与区别 本篇总结JDBC执行SQL语句的三种方式,主要演示向数据表插入一行数据,文中的数据库名为JavaSE,数据表名为tb_user。 我的数据库连接名为“admin”,密码为“xyz123”,这里是自己装SQLServer时自己设置的。 这里给出建立数据库和数据表的SQL语句: CREATE DATABASE IF NOT EXISTS JavaSE; USE JavaSE; CREATE T

m0_46211448的博客 484

JDBC之Statement,PreparedStatement,CallableStatement的区别

Statement 每次执行sql语句,数据库都要执行sql语句的编译 ,最好用于仅执行一次查询并返回结果的情形,效率高于PreparedStatement.PreparedStatement是预编译的,使用PreparedStatement有几个好处 a. 在执行可变参数的一条SQL时,PreparedStatement比Statement的效率高,因为DBMS预编译一条SQL当然会比多次编译一条SQL的效率要高。 b. 安全性好,有效防止Sql注入等问题。 c.  对于多次重复执行的语句,使用Prepa

ystyaoshengting的专栏 1万+

JDBC实例 Statement,PreparedStatement,CallableStatement三个方法的实例

public void ListStudents() throws SQLException{   int i, NoofColumns;   String StNo, StFName, StLName;   //初始化并加载JDBC-ODBC驱动程序   Class.forName("jdbc.odbc.JdbcOdbcDriver");   //创建连接对象   Connectio

maomaoduoer的专栏 1342

JDBC--Statement,PreparedStatement,CallableStatement的区别

JDBC: Statement(接口)      | PreparedStatement(接口)      | CallableStatement(接口) 以上三者为继承关系。 1).概念: Statement:(用于执行不带参数的简单 SQL 语句)

hjf19790118的专栏 545

JDBC核心接口解析:Statement、PreparedStatement与CallableStatement实战

JDBC作为Java连接数据库的标准API,其核心接口Statement、PreparedStatement和CallableStatement是开发者必须掌握的基础技术。这些接口通过SQL预编译、参数绑定等机制,有效解决了SQL注入风险、提升了查询性能。在企业级应用中,合理选择语句类型可显著优化数据库操作效率,特别是在高并发场景下的批处理操作和存储过程调用。通过连接池集成与语句缓存配置,能够进一步降低系统开销。本文结合尚硅谷技术社区实践经验,深入解析三种接口的底层原理、安全防护机制及性能优化方案,帮助开发

weixin_34327223的博客 503
上一篇: XML和JSON类型数据
下一篇: Android屏幕适配基本概念
Android_tools
博客等级 码龄9年 24粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值