一. JDBC调用存储过程

(1)使用存储过程SQL编写的程序代码,等一段语句和控制流语句。在创建时被编译成机器代码和存储在数据库中的client转让。

存储过程具有以下优势:

1.所生成的机器代码被永久存储在数据库中,client调用时不须要又一次编译,运行起来效率要高一些。

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

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

(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=""%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head>
<body>
<%
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("<br>");
} } catch (Exception e) {
out.print("数据库操作出错:" + e);
} finally {
if (rs != null)
rs.close();
if (st != null)
st.close();
if (con != null)
con.close();
}
%>
</body>
</html>

(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="" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head> <body>
<form id="form1" name="form1" method="post" action="exam610.jsp">
请输入书号(如AD3344):
<label>
<input name="book_id" type="text" id="book_id" />
</label>
<p>请输入书名(如Java程序设计):
<label>
<input name="book_name" type="text" id="book_name" />
</label>
</p>
<p>请选择书的类型:
<label>
<select name="book_type" id="book_type">
<option value="business">business</option>
<option value="psychology">psychology</option>
<option value="trad_cook">trad_cook</option>
<option value="popular_comp">popular_comp</option>
</select>
</label>
</p>
<p>请输入书的单位价格(如45.3):
<label>
<input name="book_price" type="text" id="book_price" />
</label>
</p>
<p>请输入图书的出版日期(如2004-3-6):
<label>
<input name="pub_date" type="text" id="pub_date" />
</label>
</p>
<p>
<label>
<input type="submit" name="Submit" value="提交" />
</label>
</p>
</form>
</body>
</html>

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

<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*"  errorPage="" %>
<html> <head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>
</head> <body>
<%
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();}
}
%>
</body>
</html>

版权声明:本文博主原创文章。博客,未经同意不得转载。

JDBC调用存储过程的更多相关文章

  1. Java数据库连接——JDBC调用存储过程,事务管理和高级应用

    一.JDBC常用的API深入详解及存储过程的调用 相关链接:Jdbc调用存储过程 1.存储过程(Stored Procedure)的介绍 我们常用的操作数据库语言SQL语句在执行的时候需要先编译,然后 ...

  2. jdbc调用存储过程的方法

    ----------------------------jdbc调用存储过程的方法---------------------------------------------------private ...

  3. Java数据库连接--JDBC调用存储过程,事务管理和高级应用

    相关链接:Jdbc调用存储过程 一.JDBC常用的API深入详解及存储过程的调用 1.存储过程的介绍 我们常用的操作数据库语言SQL语句在执行的时候要先进行编译,然后执行,而存储过程是在大型数据库系统 ...

  4. JDBC调用存储过程的例子

    下面是我学到了Oracle存储过程,在这里跟大家简单的分享一下利用JDBC调用存储过程的例子: 废话就不啰嗦,现在就直接上机代码. 首先我利用的是Oracle中默认的 scott 数据库里的 emp员 ...

  5. JDBC(13)—JDBC调用存储过程和函数

    步骤: JDBC调用存储过程和函数 步骤: ①:通过Connection对象的prepareCall()方法创建一个CallableStatement对象的实例,在使用Connection对象的pre ...

  6. Java JDBC调用存储过程:无参、输入带参、输出及输出带参

    Java JDBC调用存储过程:无参.输入带参.输出及输出带参 示例代码: package xzg; import java.sql.CallableStatement; import java.sq ...

  7. JDBC调用存储过程,进参出参

    今天做了一个数据表拷贝的功能,用到了存储过程,就写了一个java中用jdbc调用存储过程的代码,成功的实现了功能,晚上跑回家记录下 Connection conn = ConnectionUtil.g ...

  8. oracle学习笔记(二十三)——JDBC调用存储过程以及批量操作

    jdbc调用存储过程 使用并获得out模式的参数返回值 //存储过程为sum_sal(deptno department.deptno%type,sum in out number) Callable ...

  9. jdbc调用存储过程获取多个结果集

    jdbc调用存储过程获取多个结果集 2017年07月26日 21:20:22 Kenny-Liu 阅读数:1486 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.cs ...

随机推荐

  1. hdu5124(树状数组+离散化)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5124 题意:有n条线段,求被覆盖到次数最多的点的次数 分析: 1.可以转化成求前缀和最大的问题:将区间 ...

  2. Android_多媒体_SoundPool声音池使用

    1.SoundPool概述 SoundPool就相当于一个简单的集合,可以将apk中的资源或者系统中的文件加载至内存中,使用了MediaPlayer服务区解码音频文件,用SoundPool可以播一些短 ...

  3. 【十一年】注入框架RoboGuice采用:(Your First Injection into a Custom View class)

    上一篇我们简单的介绍了一下RoboGuice的使用([十]注入框架RoboGuice使用:(Your First Testcase)),今天我们来看下自己定义View的注入(Custom View). ...

  4. 低版本的 opencv库的 vs2010 打开 高版本opencv

    打开track.vcxproj文件, 注释掉跟版本有关的行就可. 本例子中,当用双击.sln用vs2010打开高版本的opencv项目时,会出现错误, 并且会有错误信息提示,双击该错误信息,就会打开该 ...

  5. 阅读zepto.js的core中的Core methods

    学习zepto.js,參考资料:http://www.zeptojs.cn/ 跟jQuery一样.其选择符号也是$; 首先接触的是 $.()  选择 $(selector, [context]) ⇒ ...

  6. XSS漏洞的分类

    XSS漏洞依照攻击利用手法的不同,有下面三种类型: 类型A,本地利用漏洞,这样的漏洞存在于页面中client脚本自身.其攻击步骤例如以下所看到的: Alice给Bob发送一个恶意构造了Web的URL. ...

  7. C++结构体:默认构造函数,复制构造函数,重载=运算符

    C++结构体提供了比C结构体更多的功能,如默认构造函数,复制构造函数,运算符重载,这些功能使得结构体对象能够方便的传值. 比如,我定义一个简单的结构体,然后将其作为vector元素类型,要使用的话,就 ...

  8. 搭建ganglia集群而且监视hadoop CDH4.6

    前言 近期在研究云监控的相关工具,感觉ganglia颇有亮点,能从一个集群总体的角度来展现数据. 但是安装过程稍过复杂,相关依赖稍多,故写此文章与大家分享下. 本文不解说相关原理,若想了解请參考其它资 ...

  9. android4.0 USB Camera示例(五个辅助)jpg压缩

    前的最后一个 我们说,一个直接yuv变成jpg该功能 但是转换不成功 主要功能是yuv420转jpg的 根据研究发现 yuv420的序列是这种 YYYY YYYY UVUV 而yuv422的隔行扫描的 ...

  10. Android Google Map v2具体解释:开发环境配置

    Android Google Map v2具体解释:开发环境配置                                       --转载请注明出处:coder-pig 说在前面: 说到地 ...