iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java数据库程序中的存储过程怎么使用
  • 482
分享到

Java数据库程序中的存储过程怎么使用

2023-06-17 12:06:17 482人浏览 八月长安
摘要

这篇文章主要介绍“Java数据库程序中的存储过程怎么使用”,在日常操作中,相信很多人在Java数据库程序中的存储过程怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java数据库程序中的存储过程怎么使用

这篇文章主要介绍“Java数据库程序中的存储过程怎么使用”,在日常操作中,相信很多人在Java数据库程序中的存储过程怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java数据库程序中的存储过程怎么使用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

存储过程是指保存在数据库并在数据库端执行的程序。你可以使用特殊的语法在Java类中调用存储过程。在调用时,存储过程的名称及指定的参数通过JDBC连接发送给DBMS,执行存储过程并通过连接(如果有)返回结果。

使用存储过程拥有和使用基于EJB或CORBA这样的应用服务器一样的好处。区别是存储过程可以从很多流行的DBMS中免费使用,而应用服务器大都非常昂贵。这并不只是许可证费用的问题。使用应用服务器所需要花费的管理、编写代码的费用,以及客户程序所增加的复杂性,都可以通过DBMS中的存储过程所整个地替代。

你可以使用Java,python,Perl或C编写存储过程,但是通常使用你的DBMS所指定的特定语言。oracle使用PL/sqlpostgresql使用pl/pgsql,DB2使用Procedural SQL.这些语言都非常相似。在它们之间移植存储过程并不比在Sun的EJB规范不同实现版本之间移植Session Bean困难。并且,存储过程是为嵌入SQL所设计,这使得它们比Java或C等语言更加友好地方式表达数据库的机制。

因为存储过程运行在DBMS自身,这可以帮助减少应用程序中的等待时间。不是在Java代码中执行4个或5个SQL语句,而只需要在服务器端执行1个存储过程。网络上的数据往返次数的减少可以戏剧性地优化性能。

使用存储过程

简单的老的JDBC通过CallableStatement类支持存储过程的调用。该类实际上是PreparedStatement的一个子类。假设我们有一个poets数据库。数据库中有一个设置诗人逝世年龄的存储过程。下面是对老酒鬼Dylan Thomas(old soak Dylan Thomas,不指定是否有关典故、文化,请批评指正。译注)进行调用的详细代码:

try{ int age = 39;   String poetName = "dylan thomas";   CallableStatement proc = connection.prepareCall(" {   call set_death_age(?, ?) }");   proc.setString(1, poetName);   proc.setInt(2, age);   cs.execute();}catch (SQLException e)  {   // ....  }

传给prepareCall方法的字串是存储过程调用的书写规范。它指定了存储过程的名称,?代表了你需要指定的参数。

和JDBC集成是存储过程的一个很大的便利:为了从应用中调用存储过程,不需要存根(stub)类或者配置文件,除了你的DBMS的JDBC驱动程序外什么也不需要。

当这段代码执行时,数据库的存储过程就被调用。我们没有去获取结果,因为该存储过程并不返回结果。执行成功或失败将通过例外得知。失败可能意味着调用存储过程时的失败(比如提供的一个参数的类型不正确),或者一个应用程序的失败(比如抛出一个例外指示在poets数据库中并不存在“Dylan Thomas”)

结合SQL操作与存储过程

映射Java对象到SQL表中的行相当简单,但是通常需要执行几个SQL语句;可能是一个SELECT查找ID,然后一个INSERT插入指定ID的数据。在高度规格化(符合更高的范式,译注)的数据库模式中,可能需要多个表的更新,因此需要更多的语句。Java代码会很快地膨胀,每一个语句的网络开销也迅速增加。

将这些SQL语句转移到一个存储过程中将大大简化代码,仅涉及一次网络调用。所有关联的SQL操作都可以在数据库内部发生。并且,存储过程语言,例如PL/SQL,允许使用SQL语法,这比Java代码更加自然。下面是我们早期的存储过程,使用Oracle的PL/SQL语言编写:

create procedure set_death_age(poet VARCHAR2, poet_age NUMBER)poet_id NUMBER;  beginSELECT id INTO poet_id FROM poets WHERE name = poet;  INSERT INTO deaths (mort_id, age) VALUES (poet_id, poet_age);  end set_death_age;

很独特?不。我打赌你一定期待看到一个poets表上的UPDATE.这也暗示了使用存储过程实现是多么容易的一件事情。set_death_age几乎可以肯定是一个很烂的实现。我们应该在poets表中添加一列来存储逝世年龄。Java代码中并不关心数据库模式是怎么实现的,因为它仅调用存储过程。我们以后可以改变数据库模式以提高性能,但是我们不必修改我们代码。

下面是调用上面存储过程的Java代码:

public static void setDeathAge(Poet dyingBard, int age)throws SQLException{   Connection con = null;   CallableStatement proc = null;   try {  con = connectionPool.getConnection();  proc = con.prepareCall("{ call set_death_age(?, ?) }"); proc.setString(1, dyingBard.getName());  proc.setInt(2, age);  proc.execute();   }   finally {  try  {   proc.close();  }  catch (SQLException e)   {}con.close();   }}

为了确保可维护性,建议使用像这儿这样的static方法。这也使得调用存储过程的代码集中在一个简单的模版代码中。如果你用到许多存储过程,就会发现仅需要拷贝、粘贴就可以创建新的方法。因为代码的模版化,甚至也可以通过脚本自动生产调用存储过程的代码。

Functions

存储过程可以有返回值,所以CallableStatement类有类似getResultSet这样的方法来获取返回值。当存储过程返回一个值时,你必须使用reGISterOutParameter方法告诉JDBC驱动器该值的SQL类型是什么。你也必须调整存储过程调用来指示该过程返回一个值。

下面接着上面的例子。这次我们查询Dylan Thomas逝世时的年龄。这次的存储过程使用PostgreSQL的pl/pgsql:

create function snuffed_it_when (VARCHAR) returns integer 'declarepoet_id NUMBER;  poet_age NUMBER;  begin-- first get the id associated with the poet.SELECT id INTO poet_id FROM poets WHERE name = $1;  -- get and return the age.SELECT age INTO poet_age FROM deaths WHERE mort_id = poet_id;  return age;  end;  ' language 'pl/pgsql';

另外,注意pl/pgsql参数名通过Unix和DOS脚本的$n语法引用。同时,也注意嵌入的注释,这是和Java代码相比的另一个优越性。在Java中写这样的注释当然是可以的,但是看起来很凌乱,并且和SQL语句脱节,必须嵌入到Java String中。

到此,关于“Java数据库程序中的存储过程怎么使用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: Java数据库程序中的存储过程怎么使用

本文链接: https://www.lsjlt.com/news/289185.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java数据库程序中的存储过程怎么使用
    这篇文章主要介绍“Java数据库程序中的存储过程怎么使用”,在日常操作中,相信很多人在Java数据库程序中的存储过程怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java数据库程序中的存储过程怎么使用...
    99+
    2023-06-17
  • 怎么写数据库的存储过程
    今天就跟大家聊聊有关怎么写数据库的存储过程,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。  SQL语句需要先编译然后执行,而存储过程(Stored ...
    99+
    2022-10-18
  • 数据库中使用存储过程的实例
    这篇文章将为大家详细讲解有关数据库中使用存储过程的实例,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。什么是存储过程如果你接触过其他的编程语言,那么就好理解了,存储过程就像...
    99+
    2022-10-18
  • 数据库怎么加密存储过程
    在数据库中对存储过程进行加密的方法首先,数据库中进行一个存储过程;CREATE PROCEDURE dbo.myPRoAS BEGINSELECT 'SQL statements'ENDGO存储过程新建好后,执行以下命令即可对存储过程进行加...
    99+
    2022-10-15
  • SQLServer数据库中怎么创建存储过程
    SQLServer数据库中怎么创建存储过程,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。  SQLServer数据库存储过程怎么创建和应用  ...
    99+
    2022-10-18
  • sqlserver中怎么复制数据库存储过程
    今天就跟大家聊聊有关sqlserver中怎么复制数据库存储过程,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。在目前的工作中需要解决复制整个SqlSe...
    99+
    2022-10-18
  • mysql数据库的存储过程
    本篇内容介绍了“mysql数据库的存储过程”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 一、创建存储过...
    99+
    2022-10-18
  • mysql数据库存储数据的过程
    这篇文章主要讲解了“mysql数据库存储数据的过程”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql数据库存储数据的过程”吧! 存储过程如下: J...
    99+
    2022-10-18
  • Oracle数据库存储过程的调试过程
    目录oracle存储过程调试方法Oracle 存储过程的调试总结oracle存储过程调试方法 PL/SQL中为我们提供了【调试存储过程】的功能,可以帮助你完成存储过程的预编译与测试。 点击要调试的存储过程,右键...
    99+
    2022-07-05
    oracle 调试存储过程 oracle 存储过程怎么调试 oracle存储过程如何调试
  • 存储过程在数据库中有什么用
    这篇文章给大家分享的是有关存储过程在数据库中有什么用的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。存储过程在数据库中的作用:1、存储过程可接受参数、输出参数、返回单个或多个结果集...
    99+
    2022-10-18
  • sql中怎么处理数据库锁的存储过程
    这篇文章给大家介绍sql中怎么处理数据库锁的存储过程,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。邹建 2004.4复制代码 代码如下: alter proc p_lockinfo...
    99+
    2022-10-18
  • mysql数据库中的存储过程是什么
    这篇文章给大家分享的是有关mysql数据库中的存储过程是什么的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。mysql存储过程是在大型数据库系统中,一组为了完成特定功能的SQL 语...
    99+
    2022-10-18
  • Java中怎么调用存储过程
    Java中怎么调用存储过程,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。存储过程是指保存在数据库并在数据库端执行的程序。你可以使用特殊的语法在Java类中调用存储过程。在调...
    99+
    2023-06-17
  • SQL Server数据库中的存储过程是怎么样的
    SQL Server数据库中的存储过程是怎么样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。什么是存储过程如果你接触过其他的编程语言,那么就...
    99+
    2022-10-19
  • MySQL数据库之存储过程怎么创建
    本篇内容介绍了“MySQL数据库之存储过程怎么创建”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言:stored procedure 完成...
    99+
    2023-07-02
  • Java中怎么调用SqlServer存储过程
    Java中怎么调用SqlServer存储过程,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。  1.数据库连接packageco...
    99+
    2022-10-18
  • Oracle中怎么调用Java存储过程
    这期内容当中小编将会给大家带来有关Oracle中怎么调用Java存储过程,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、如何创建java存储过程?通常有三种方法来创建java存储过程。1. 使用orac...
    99+
    2023-06-17
  • 存储mysql数据库的详细过程
    下面一起来了解下存储mysql数据库的详细过程,相信大家看完肯定会受益匪浅,文字在精不在多,希望存储mysql数据库的详细过程这篇短内容是你想要的。存储过程简介存储过程可以简单理解为一条或者多条sql语句的...
    99+
    2022-10-18
  • MySQL中怎么使用存储过程
    MySQL中怎么使用存储过程,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 mysql存储过程存储过程(Stored  P...
    99+
    2022-10-18
  • MySQL数据库的视图、存储过程和存储引擎
    本文主要介绍了MySQL数据库的视图和MySQL数据库的存储过程,还介绍了MySQL的两个存储引擎MyISAM和InnoDB,希望大家通过这篇文章有所收获。一、前言MySQL 视图(View)是一种虚拟存在...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作