一. 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. 在Windows下使用Hexo+GithubPage搭建博客的过程

    1.安装Node.js 下载地址:传送门 去 node.js 官网下载相应版本,进行安装即可. 可以通过node -v的命令来测试NodeJS是否安装成功 2.安装Git 下载地址:传送门 去 Git ...

  2. JSP网站开发基础总结《九》(转)

    本篇属于附加篇,在之前的总结中给大家提到过一个关于登录状态验证的效果,当时是通过Session对象完成的,今天我查了一下,JSP为我们封装了一个用于过滤用的过滤器类Filter,通过它我们就可以非常轻 ...

  3. Android自己定义控件实战——仿淘宝商品浏览界面

    转载请声明出处http://blog.csdn.net/zhongkejingwang/article/details/38656929 用手机淘宝浏览商品详情时,商品图片是放在后面的,在第一个Scr ...

  4. Codeforces Jzzhu and Sequences(圆形截面)

    # include <stdio.h> int f[10]; int main() { int x,y,n,j; while(~scanf("%d%d%d",& ...

  5. varchar 分享影响记忆 试

    准备数据 sysbench --test=oltp --oltp-nontrx-mode=update_key --mysql-table-engine=innodb --oltp-table-siz ...

  6. eclipse加入辅助线,配合代码格式化使用

  7. codeforces55D数位dp

    codeforces55D 查询给定区间内的beautiful number.  一个数字是beautiful number当且仅当能被自己的各个数字不为0的位整除. 这个dp的状态还是挺难想的.一个 ...

  8. Shiro学习笔记(5)——web集成

    Web集成 shiro配置文件shiroini 界面 webxml最关键 Servlet 測试 基于 Basic 的拦截器身份验证 Web集成 大多数情况.web项目都会集成spring.shiro在 ...

  9. 菜鸟学习spring IOC有感

     一.spring IOC思想引入 事实上对于刚開始学习的人来说,在学习IOC的时候确实有点困难,主要是掌握其思想方面存在一丢丢的障碍,可是假设可以跨过这个障碍,则可以高速掌握当中的思想了.单从字 ...

  10. 【原创】leetCodeOj --- Candy 解题报告

    题目地址: https://leetcode.com/problems/candy/ 题目内容: Candy Total Accepted: 43150 Total Submissions: 2038 ...