您的位置:首页 > 数据库

JSP中调用存储过程(SQL2000)

2009-01-08 16:41 246 查看
创建测试数据库:

CREATE DATABASE Book

go

use Book

CREATE TABLE users(

    id varchar (50) null,

    name varchar(50) null,

    password int null

)

go

use Book

INSERT INTO users VALUES("aaaaa","bbbb",2222)

go

创建存储过程:

use Book

go

CREATE PROCEDURE user1

@id varchar(50)  output,

@name varchar(50) output,

@password int output

as

INSERT INTO users (id,name,password) VALUES(@id,@name,@password)

RETURN 1--此为返回结果集,即JSP中变量sql的第一个问号

GO

创建JSP:

 

<%@ page language="java" contentType="text/html; charset=gb2312" pageEncoding="gb2312"%>

<%@ page import="java.sql.*"%> 

<!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>

</head>

<body>

<%/*author:Robsen */

  /*E-mail:luoqinglong0102#163.com */

    String driver="com.microsoft.jdbc.sqlserver.SQLServerDriver";

    String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=Book"; //这是SQL 2000的URL地址,和2005的不一样

    String user = "sa";

    String password = "";

    //第一个"?"为存储过程的返回结果集,调用存储过程的SQL语句的语法参看JDK API的CallableStatement类

    String sql = "{? = call user1(?,?,?)}"; //user1为存储过程的名字

    Connection conn = null;

    CallableStatement cs = null;

 try{

    Class.forName(driver).newInstance();

    conn = DriverManager.getConnection(url,user,password);

    //创建一个 CallableStatement 对象来调用数据库存储过程。

    cs = conn.prepareCall(sql);

    

    //cs.setXXX(int parameterIndex,XXX x)用于给问号赋值,"parameterIndex"为"?"的序号,

    //此处"?"不能用数据库的字段名代替(本人用的是SQL 2000,听说2005可以用字段名),如"id","name"

    cs.setString(2,"s12233ss"); //"2"表示存储过程里的第一个变量;为什么不是"1",因为在变量"sql"中这是第二个问好

    cs.setString(3,"123131");

    cs.setInt(4,2342);

    //registerOutParameter(x,y)为注册函数,第一个参数为"?"的序号,此处不能用数据库的字段名代替,如"id","name"

    //原型为:registerOutParameter(int parameterIndex, int sqlType),

    //按顺序位置 parameterIndex 将 OUT 参数注册为 JDBC 类型 sqlType。

    cs.registerOutParameter(1,java.sql.Types.INTEGER);//"1"表示"sql"变量中的第一个?,一定要在这里注册

    cs.registerOutParameter(2,java.sql.Types.VARCHAR);//

    cs.registerOutParameter(3,java.sql.Types.VARCHAR);

    cs.registerOutParameter(4,java.sql.Types.INTEGER);

    cs.execute();

    //在使用cs.getXXX(int parameterIndex)方法前,除了返回结果集,

    //其余的"?"(参数)要在存储过程中声明为"output",否则运行是会出错误

    int returnValue = cs.getInt(1) ;//获取从存储过程返回的结果集,本存储过程用return返回

    String id = cs.getString(2);

    String name = cs.getString(3);

    int password1 = cs.getInt(4);

        if( returnValue== 1){

            out.print("<br><hr><li>添加成功!");

            out.print("<br>id:"+id);

            out.print("<br>name:"+name);

            out.print("<br>password:"+password1);

            out.print("<li>returnValue = " + returnValue);

        }else{

                out.print("<li>添加失败!");

        }

    }

catch(Exception ex)

    {

        

    out.print(ex.getLocalizedMessage());//getLocalizedMessage()这个方法很好用,抛出异常时会有好提示

    

    }

finally

{

    try

    {

        if(cs != null)

        {

            cs.close();

            cs = null;

        }

        if(conn != null)

        {

            conn.close();

            conn = null;

        }

    }catch(Exception e)

        {

            e.printStackTrace();

        }

    }

%>

<h2>wwwwwwwwwwwwwwwwww</h2>

</body>

</html>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息