当前位置: 首页 > 文档资料 > JDBC API 中文教程 >

声明

优质
小牛编辑
146浏览
2023-12-01

一旦获得连接,我们就可以与数据库进行交互。 JDBC Statement, CallableStatement,PreparedStatement接口定义了使您能够发送SQL或PL/SQL命令以及从数据库接收数据的方法和属性。

它们还定义了有助于桥接数据库中使用的Java和SQL数据类型之间的数据类型差异的方法。

下表提供了每个接口确定要使用的接口的目的的摘要。

接口推荐用途
Statement使用对数据库的通用访问。 在运行时使用静态SQL语句时很有用。 Statement接口不能接受参数。
PreparedStatement当您计划多次使用SQL语句时使用。 PreparedStatement接口在运行时接受输入参数。
CallableStatement使用何时访问数据库存储过程。 CallableStatement接口也可以接受运行时输入参数。

声明对象

创建语句对象

在使用Statement对象执行SQL语句之前,需要使用Connection对象的createStatement()方法创建一个,如下例所示 -

Statement stmt = null;
try {
   stmt = conn.createStatement( );
   . . .
}
catch (SQLException e) {
   . . .
}
finally {
   . . .
}

一旦创建了Statement对象,就可以使用它来执行带有三种执行方法之一的SQL语句。

  • boolean execute (String SQL) :如果可以检索ResultSet对象,则返回布尔值true; 否则,它返回false。 使用此方法执行SQL DDL语句或需要使用真正的动态SQL时。

  • int executeUpdate (String SQL) :返回执行SQL语句所影响的行数。 使用此方法执行您希望受到多个行影响的SQL语句 - 例如,INSERT,UPDATE或DELETE语句。

  • ResultSet executeQuery (String SQL) :返回ResultSet对象。 当您希望获得结果集时,请使用此方法,就像使用SELECT语句一样。

关闭语句对象

就像关闭Connection对象以保存数据库资源一样,出于同样的原因,您也应该关闭Statement对象。

对close()方法的简单调用将完成这项工作。 如果先关闭Connection对象,它也将关闭Statement对象。 但是,您应始终显式关闭Statement对象以确保正确清理。

Statement stmt = null;
try {
   stmt = conn.createStatement( );
   . . .
}
catch (SQLException e) {
   . . .
}
finally {
   stmt.close();
}

为了更好地理解,我们建议您学习语句 - 示例教程

PreparedStatement对象

PreparedStatement接口扩展了Statement接口,它为您提供了比通用Statement对象更多的功能。

此语句为您提供动态提供参数的灵活性。

创建PreparedStatement对象

PreparedStatement pstmt = null;
try {
   String SQL = "Update Employees SET age = ? WHERE id = ?";
   pstmt = conn.prepareStatement(SQL);
   . . .
}
catch (SQLException e) {
   . . .
}
finally {
   . . .
}

JDBC中的所有参数都由?表示? 符号,称为参数标记。 在执行SQL语句之前,必须为每个参数提供值。

setXXX()方法将值绑定到参数,其中XXX表示要绑定到输入参数的值的Java数据类型。 如果您忘记提供值,您将收到SQLException。

每个参数标记由其序数位置引用。 第一个标记代表位置1,下一个位置代表2,依此类推。 此方法与Java数组索引的方法不同,后者从0开始。

所有Statement object's与数据库交互Statement object's方法(a)execute(),(b)executeQuery()和(c)executeUpdate()也可以与PreparedStatement对象一起使用。 但是,修改方法以使用可以输入参数的SQL语句。

关闭PreparedStatement对象

就像关闭Statement对象一样,出于同样的原因,您也应该关闭PreparedStatement对象。

对close()方法的简单调用将完成这项工作。 如果先关闭Connection对象,它也将关闭PreparedStatement对象。 但是,您应始终显式关闭PreparedStatement对象以确保正确清理。

PreparedStatement pstmt = null;
try {
   String SQL = "Update Employees SET age = ? WHERE id = ?";
   pstmt = conn.prepareStatement(SQL);
   . . .
}
catch (SQLException e) {
   . . .
}
finally {
   pstmt.close();
}

为了更好地理解,让我们学习准备 - 示例代码

CallableStatement对象

就像Connection对象创建Statement和PreparedStatement对象一样,它也会创建CallableStatement对象,该对象将用于执行对数据库存储过程的调用。

创建CallableStatement对象

假设您需要执行以下Oracle存储过程 -

CREATE OR REPLACE PROCEDURE getEmpName 
   (EMP_ID IN NUMBER, EMP_FIRST OUT VARCHAR) AS
BEGIN
   SELECT first INTO EMP_FIRST
   FROM Employees
   WHERE ID = EMP_ID;
END;

NOTE:上面的存储过程是为Oracle编写的,但是我们正在使用MySQL数据库,所以,让我们为MySQL编写相同的存储过程,如下所示在EMP数据库中创建它 -

DELIMITER $$
DROP PROCEDURE IF EXISTS `EMP`.`getEmpName` $$
CREATE PROCEDURE `EMP`.`getEmpName` 
   (IN EMP_ID INT, OUT EMP_FIRST VARCHAR(255))
BEGIN
   SELECT first INTO EMP_FIRST
   FROM Employees
   WHERE ID = EMP_ID;
END $$
DELIMITER ;

存在三种类型的参数:IN,OUT和INOUT。 PreparedStatement对象仅使用IN参数。 CallableStatement对象可以使用所有这三个。

以下是每个的定义 -

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

以下代码段显示如何使用Connection.prepareCall()方法基于前面的存储过程实例化CallableStatement对象 -

CallableStatement cstmt = null;
try {
   String SQL = "{call getEmpName (?, ?)}";
   cstmt = conn.prepareCall (SQL);
   . . .
}
catch (SQLException e) {
   . . .
}
finally {
   . . .
}

String变量SQL表示存储过程,带有参数占位符。

使用CallableStatement对象与使用PreparedStatement对象非常相似。 必须在执行语句之前将值绑定到所有参数,否则您将收到SQLException。

如果您有IN参数,请遵循适用于PreparedStatement对象的相同规则和技术; 使用与您绑定的Java数据类型对应的setXXX()方法。

使用OUT和INOUT参数时,必须使用额外的CallableStatement方法registerOutParameter()。 registerOutParameter()方法将JDBC数据类型绑定到存储过程应返回的数据类型。

调用存储过程后,使用相应的getXXX()方法从OUT参数中检索值。 此方法将检索到的SQL类型值转换为Java数据类型。

关闭CallableStatement对象

就像关闭其他Statement对象一样,出于同样的原因,您也应该关闭CallableStatement对象。

对close()方法的简单调用将完成这项工作。 如果先关闭Connection对象,它也将关闭CallableStatement对象。 但是,您应始终显式关闭CallableStatement对象以确保正确清理。

CallableStatement cstmt = null;
try {
   String SQL = "{call getEmpName (?, ?)}";
   cstmt = conn.prepareCall (SQL);
   . . .
}
catch (SQLException e) {
   . . .
}
finally {
   cstmt.close();
}

为了更好地理解,我建议学习Callable - 示例代码

最后更新:

类似资料

  • 2.2. 声明 声明语句定义了程序的各种实体对象以及部分或全部的属性。Go语言主要有四种类型的声明语句:var、const、type和func,分别对应变量、常量、类型和函数实体对象的声明。这一章我们重点讨论变量和类型的声明,第三章将讨论常量的声明,第五章将讨论函数的声明。 一个Go语言编写的程序对应一个或多个以.go为文件后缀名的源文件中。每个源文件以包的声明语句开始,说明该源文件是属于哪个包。

  • 本页包含内容: 模块范围 代码块 引入声明 常量声明 变量声明 类型的别名声明 函数声明 枚举声明 结构体声明 类声明 协议声明 构造器声明 析构声明 扩展声明 下标脚本声明 运算符声明 声明修饰符 一条声明可以在你的程序里引入新的名字和构造。举例来说,你可以使用声明来引入函数和方法,变量和常量,或者来定义 新的命名好的枚举,结构,类和协议类型。你也可以使用一条声明来延长一个已经存在的命名好的类型

  • 这里需要说明一下,笔者不建议在Windows环境下进行深度学习的研究,一方面是因为Windows所对应的框架搭建的依赖过多,社区设定不完全;另一方面,Linux系统下对显卡支持、内存释放以及存储空间调整等硬件功能支持较好。如果您对Linux环境感到陌生,并且大多数开发环境在Windows下更方便操作的话,希望这篇文章对您会有帮助。 关于计算机的硬件配置说明 推荐配置 如果您是高校学生或者高级研究人

  • 本教程不得用于任何形式的商业用途,如果需要转载请与作者SCP-173联系,如果发现未经允许复制转载,将保留追求其法律责任的权利。 关于计算机的硬件配置说明 推荐配置 如果您是高校学生或者高级研究人员,并且实验室或者个人资金充沛,建议您采用如下配置: 主板:X99型号或Z170型号 CPU:i7-5830K或i7-6700K 及其以上高级型号 内存:品牌内存,总容量32G以上,根据主板组成4通道或8

  • 此书电子版免费供大家下载阅读,如果您已为此副本付费,请立即申请退款并联系作者举报此行为。请注意,虽然此书电子版免费供大家阅读,但这并不代表作者放弃了版权,您在未经授权的情况下依然不得以任何方式复制或抄袭本书内容。此书的电子版目前仅授权图灵社区和百度阅读两个平台发布,如果您通过其他渠道获取到了此副本,则是侵权行为,请到上述两个平台下载合法授权的副本。获取合法授权副本的好处是可以及时得到此书的最新版本

  • 问题内容: 我想让一个python程序通过发出哔哔声来提醒我。当前,我使用然后使用命令行语音程序说“处理完成”。我宁愿它只是一个简单的“钟”。 我知道有一个可以在 Cocoa 应用程序中使用的功能,但是我认为这与该功能没有任何关系。 我也尝试过 但这没用。 如果您无法从我的 可可粉 评论中得知,我正在使用Mac,这可能会有所帮助。 问题答案: 你有没有尝试过 : 在Mac OS 10.5上适合我