热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JDBC存储过程的调用

一. JDBC存储过程的调用(1)存储过程是用SQL语句和控制流语句等编写的一段程序代码,在创建时已被编译成机器代码并存储在数据库中供客户端调用。存储过程有以下优点: 1.所生成的机器代码被永久存储在数据库中,客户端调用时不需要重新编译,执行起来效率要高一些。 2.存储过程的网络使用效率比

一. JDBC存储过程的调用

(1)存储过程是用SQL语句和控制流语句等编写的一段程序代码,在创建时已被编译成机器代码并存储在数据库中供客户端调用。

存储过程有以下优点: 

1.所生成的机器代码被永久存储在数据库中,客户端调用时不需要重新编译,执行起来效率要高一些。 

2.存储过程的网络使用效率比等效的SQL 语句要高。

(2)JDBC通过java.sql.CallableStatement接口调用数据库服务器中的存储过程;

(3)CallableStatement接口继承了PreparedStatement,PreparedStatement中常用的方法也适用于CallableStatement接口,

接口中常用的方法有:

 1.public void setString(int n,String x)  throws SQLException

将一个字符串类型的数据值x写入存储过程调用命令的第n个“?”号处,代替“?”,n为预编译语句中“?”的序号,第一个“?”的序号为1。

 2.public ResultSet executeQuery() throws SQLException     

执行一个会返回ResultSet结果集的存储过程。

 3.public boolean execute() throws SQLException
通用的存储过程执行方法

4.public void registerOutParameter(int n,int sqlType)  throws SQLException
将存储过程调用命令{call …}中第n个位置处的“?”参数注册声明为输出(OUT)参数,并定义返回数据的类型。返回数据类型SqlType可以用java.sql.Types类中的符号常量表达。

5.public int getInt(int n) throws SQLException
读取存储过程调用命令中“?”位置处的一个整数返回值,n为“?”号在存储过程调用命令中的序号。


二.实例解说

(1).调用一个能够返回一个ResulSet结果集的存储过程,对titles表的书名字段进行模糊查询,返回书名、类型、单价数据。操作步骤如下: 

第1步:在pubs中创建一个名为exam4的存储过程完成查询。(在数据库中SQL Server中完成)

use pubs
go
create proc  exam4 @key varchar(50)
as
begin
   select title,type,price from titles  where title like @key
end
第2步:新建一个名为exam608.jsp的页面,在此JSP网页中调用此存储过程。 

<%@ page cOntentType="text/html; charset=gb2312" language="java"
	import="java.sql.*" errorPage=""%>







	<%
		Connection con = null;
		CallableStatement st = null;
		ResultSet rs = null;
		try {
			Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
			String url = "jdbc:sqlserver://localhost:1433;databaseName=pubs;user=sa;password=";
			con = DriverManager.getConnection(url);

			String sql = "{call exam4(?)}"; //效果往这来看!!!
			st = con.prepareCall(sql);
			st.setString(1, "%the%");

			rs = st.executeQuery();
			while (rs.next()) {
				out.print(rs.getString(1));
				out.print(rs.getString(2));
				out.print(rs.getString(3));
				out.print("
"); } } catch (Exception e) { out.print("数据库操作出错:" + e); } finally { if (rs != null) rs.close(); if (st != null) st.close(); if (con != null) con.close(); } %>


(2)调用一个存储过程,给titles表添加一条新记录,新记录中至少包含书号、书名、类型、单价、出版日期五个数据。用存储过程实现。

操作步骤如下: 

第1步:在pubs中创建一个名为newRecord的存储过程,输入以下代码:

use pubs
go
create proc  newRecord @title_id varchar(50),
                       @title varchar(100),
                       @type varchar(30),
                       @price money,
                       @pubdate datetime
as
begin
  insert into titles(title_id,title,type,price,pubdate)
      values(@title_id,@title,@type,@price,@pubdate) 
end 

第2步:建立一个名为exam609.jsp的JSP表单页面供用户输入图书信息。

<%@ page cOntentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>









  请输入书号(如AD3344):
  
  

请输入书名(如Java程序设计):

请选择书的类型:

请输入书的单价(如45.3):

请输入图书的出版日期(如2004-3-6):


第3步:定义exam610.jsp读取表单中的数据并写入数据库中。 

<%@ page cOntentType="text/html; charset=gb2312" language="java" import="java.sql.*"  errorPage="" %>








<%
   String book_id=request.getParameter("book_id");
   String book_name=request.getParameter("book_name");
   String book_type=request.getParameter("book_type");
   String book_price=request.getParameter("book_price");
   String pub_date=request.getParameter("pub_date"); 
   	Connection	         con=null;
   CallableStatement     st =null;
	try
	{
      Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
	  String url="jdbc:sqlserver://localhost:1433;databaseName=pubs;user=sa;password=";
	  con = DriverManager.getConnection(url);   
	  String sql="{call newRecord(?,?,?,?,?)}";
	  st=con.prepareCall(sql);
	  st.setString(1,book_id);
	  st.setString(2,book_name);
	  st.setString(3,book_type);
	  st.setDouble(4,Double.parseDouble(book_price));
	  st.setString(5,pub_date);
	  
	  st.execute();
	  out.println("成功加入记录,请用查询分析器验证");
	}
  catch(Exception e)
  {
     out.println(e);
  }
  finally
  { 
	if(st != null )
	   {st.close();}
	if(con != null )
	   {con.close();}
  }	
%>










推荐阅读
  • 本文详细介绍了IBM DB2数据库在大型应用系统中的应用,强调其卓越的可扩展性和多环境支持能力。文章深入分析了DB2在数据利用性、完整性、安全性和恢复性方面的优势,并提供了优化建议以提升其在不同规模应用程序中的表现。 ... [详细]
  • Docker的安全基准
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 在当前众多持久层框架中,MyBatis(前身为iBatis)凭借其轻量级、易用性和对SQL的直接支持,成为许多开发者的首选。本文将详细探讨MyBatis的核心概念、设计理念及其优势。 ... [详细]
  • [论文笔记] Crowdsourcing Translation: Professional Quality from Non-Professionals (ACL, 2011)
    Time:4hoursTimespan:Apr15–May3,2012OmarZaidan,ChrisCallison-Burch:CrowdsourcingTra ... [详细]
  • 深入解析JVM垃圾收集器
    本文基于《深入理解Java虚拟机:JVM高级特性与最佳实践》第二版,详细探讨了JVM中不同类型的垃圾收集器及其工作原理。通过介绍各种垃圾收集器的特性和应用场景,帮助读者更好地理解和优化JVM内存管理。 ... [详细]
  • 非公版RTX 3080显卡的革新与亮点
    本文深入探讨了图形显卡的进化历程,重点介绍了非公版RTX 3080显卡的技术特点和创新设计。 ... [详细]
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • 程序员妻子吐槽:丈夫北漂8年终薪3万,存款情况令人意外
    一位程序员的妻子在网上分享了她丈夫在北京工作八年的经历,月薪仅3万元,存款情况却出乎意料。本文探讨了高学历人才在大城市的职场现状及生活压力。 ... [详细]
  • 本文详细介绍 Go+ 编程语言中的上下文处理机制,涵盖其基本概念、关键方法及应用场景。Go+ 是一门结合了 Go 的高效工程开发特性和 Python 数据科学功能的编程语言。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • Valve 发布 Steam Deck 的新版 Windows 驱动程序
    Valve 最新发布了针对 Steam Deck 掌机的 Windows 驱动程序,旨在提升其在 Windows 环境下的兼容性、安全性和性能表现。 ... [详细]
  • 构建基于BERT的中文NL2SQL模型:一个简明的基准
    本文探讨了将自然语言转换为SQL语句(NL2SQL)的任务,这是人工智能领域中一项非常实用的研究方向。文章介绍了笔者在公司举办的首届中文NL2SQL挑战赛中的实践,该比赛提供了金融和通用领域的表格数据,并标注了对应的自然语言与SQL语句对,旨在训练准确的NL2SQL模型。 ... [详细]
author-avatar
上当受骗的家_908
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有