孟宪会ID:net_lover
903381次访问,排名31好友199人,关注者0
http://dotnet.aspx.cc/
【声明:各位好,由于系统“添加好友”功能只能添加200个,后来的朋友不能加入,见谅!!!】
[加为好友] [即时聊天] [发私信]
net_lover的文章
原创 245 篇
翻译 2 篇
转载 5 篇
评论 840 篇
孟宪会的公告
欢迎光临!您在阅读的过程中有任何建议或者意见,请发邮件或者留言,合作愉快!
最近评论
linxi1151:牛,顶下
linxi1151:牛,顶下
linxi1151:牛,顶下
study1014:呵呵,解决了,谢谢!
study1014:js代码不起作用啊
文章分类
收藏
    相册
    文章用图
    【孟子E章】站点
    【孟子E章】站点(RSS)
    【孟子E章】网摘(RSS)
    【孟子E章】网站(RSS)
    Silverlight 1.0 SDK 中文版
    Silverlight 1.0 SDK 中文版
    【网上邻居】
    .Net开发资源中心
    【兔子】专栏
    AppleVB 主页
    Estyle(靳田)之狂想手扎
    huahaoyueyuan
    JavaProgramers的专栏
    意玺的BLOG
    最爱白菜
    枕善居VB.NET源码博客
    美丽眼睛看世界
    阿赖
    存档
    订阅我的博客
    XML聚合  FeedSky

    原创 Java/JSP中调用SQL Server存储过程完整示例收藏

    新一篇: Every other 的用法及其他 | 旧一篇: ASP.NET 2.0中CSS失效的问题总结

    最近做了个Java的小项目(第一次写Java的项目哦), 到网上搜索了半天,找到了一个比较好点的调用存储过程的例子,而且网上普遍采用的都是setXXX((int parameterIndex, XXX  x)的形式。这种形式感觉不是很直观,下面就发布一个完整的采用setXXX(String parameterName, XXX x)的编写方法。创建数据表,存储过程的代码都完整发布。

    创建表:

    CREATE TABLE [BookUser] (
        
    [UserID] [int] IDENTITY (11NOT NULL ,
        
    [UserName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,
        
    [Title] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,
        
    [Guid] [uniqueidentifier] NOT NULL CONSTRAINT [DF_BookUser_Guid] DEFAULT (newid()),
        
    [BirthDate] [datetime] NOT NULL ,
        
    [Description] [ntext] COLLATE Chinese_PRC_CI_AS NOT NULL ,
        
    [Photo] [image] NULL ,
        
    [Other] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL CONSTRAINT [DF_BookUser_Other] DEFAULT ('默认值'),
        
    CONSTRAINT [PK_BookUser] PRIMARY KEY  CLUSTERED 
        (
            
    [UserID]
        )  
    ON [PRIMARY] 
    ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    GO

    创建存储过程:

    CREATE PROCEDURE InsertUser
    @UserName varchar(50),
    @Title varchar(255),
    @Guid  uniqueidentifier,
    @BirthDate DateTime,
    @Description ntext,
    @Photo image,
    @Other nvarchar(50),
    @UserID int output 
    As

    Set NOCOUNT ON
    If Exists (select UserID from BookUser Where UserName = @UserName)
    RETURN 0
    ELSE
    Begin
    INSERT INTO BookUser (UserName,Title,Guid,BirthDate,Description,Photo,Other) VALUES(@UserName,@Title,@Guid,@BirthDate,@Description,@Photo,@Other)
    SET @UserID = @@IDENTITY
    RETURN 1
    End
    GO

    JSP代码:

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <%@ 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>
    <%
    //注意:下面的连接方法采用最新的SQL Server的JDBC,
    //请到 http://msdn2.microsoft.com/zh-cn/data/aa937724.aspx 下载
    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    String url
    ="jdbc:sqlserver://localhost:1433;databaseName=Book;user=sa;password="
    String sql 
    = "{? = call InsertUser(?,?,?,?,?,?,?,?)}"
    Connection cn 
    = null;
    CallableStatement cmd 
    = null;
    try
    {
        cn 
    = DriverManager.getConnection(url);
        cmd 
    = cn.prepareCall(sql);
        java.util.UUID Guid 
    = java.util.UUID.randomUUID();
        String FilePath 
    = application.getRealPath(""+ "\test\logo.gif";
        java.io.FileInputStream f 
    = new java.io.FileInputStream(FilePath); 
        Date rightNow 
    = Date.valueOf("2007-9-9");
        cmd.setString(
    "UserName","mengxianhui");  //注意修改这里,存储过程验证了UserName的唯一性。
        cmd.setString(
    "Title","孟宪会");
        cmd.setString(
    "Guid",Guid.toString());
        cmd.setString(
    "BirthDate","2007-9-9");
        cmd.setDate(
    "BirthDate",rightNow);
        cmd.setString(
    "Description","【孟子E章】");
        cmd.setBinaryStream(
    "Photo",f,f.available());
        cmd.setString(
    "Other",null);
        cmd.registerOutParameter(
    1,java.sql.Types.INTEGER);
        cmd.registerOutParameter(
    "UserID",java.sql.Types.INTEGER);
        cmd.execute();
        
    int returnValue = cmd.getInt(1);
        
    int UserID = cmd.getInt("UserID");
        
    if(returnValue == 1)
        {
            out.print(
    "<li>添加成功!");
            out.print(
    "<li>UserID = " + UserID);
            out.print(
    "<li>returnValue = " + returnValue);
        }
        
    else
        {
            out.print(
    "<li>添加失败!");
        }
        f.close();
    }
    catch(Exception ex)
    {
        out.print(ex.getLocalizedMessage());
    }
    finally
    {
        
    try
        {
            
    if(cmd != null)
            {
                cmd.close();
                cmd 
    = null;
            }
            
    if(cn != null)
            {
                cn.close();
                cn 
    = null;
            }
        }
        
    catch(Exception e)
        {
            e.printStackTrace();
        }
    }
    %>
    </body>
    </html>


    更新(2007-10-12);

    兼容 SQL Server 2000和SQL Server 2005的新驱动在性能和使用方面已经有很大提高,以前的Bug没有了。

    发表于 @ 2007年08月29日 17:22:00|评论(loading...)|编辑

    新一篇: Every other 的用法及其他 | 旧一篇: ASP.NET 2.0中CSS失效的问题总结

    评论

    #Terry001 发表于2007-08-31 00:56:52  IP: 222.210.179.*
    孟子开始JAVA项目了啊,先恭喜了
    #fireflyc 发表于2007-08-31 08:40:23  IP: 60.191.227.*
    数据库连接的时候都是采用连接池,你用的那个数据库的驱动程序有一定的问题~最好是下载一个开源的驱动~那个是没有bug的,微软的官方的sql server的驱动有bug
    #xiahouwen 发表于2007-08-31 15:42:51  IP: 61.185.224.*
    板凳!
    #webdiyer 发表于2007-08-31 18:42:53  IP: 219.144.59.*
    孟子老大太不争气了,怎么让Java阵营给拉了去??:)快快回头是岸!!:)
    #raojl 发表于2007-09-01 19:16:56  IP: 59.52.6.*
    好东西啊!!!给我这个初学者带来。。。。。。
    #JYYCOM 发表于2007-09-12 15:44:13  IP: 61.150.43.*
    好地方!
    以后经常来拜读。
    #yokibear 发表于2007-10-16 11:39:57  IP: 121.32.91.*
    代码拷回去 无法运行 T_T
    快出来帮帮忙吧````
    #yokibear 发表于2007-10-16 14:56:49  IP: 121.32.91.*
    最初将代码安置在我本地机子上运行时,出现
    1、设置参数值的时候,使用表中列名出错,遂改为使用下标,但是,我不明白下标是如何对应于各个参数的。。。
    所以出现如下错误:[Microsoft][SQLServer 2000 Driver for JDBC]Invalid parameter binding(s).

    现在还是没解决,完全迷茫中。。。
    #net_lover 发表于2007-10-16 16:21:09  IP: 219.237.16.*
    需要下载新的jdbc驱动,2007年2月份发布的,以前的驱动不好用

    http://msdn2.microsoft.com/zh-cn/data/aa937724.aspx
    #maidini 发表于2008-06-07 19:33:44  IP: 218.88.83.*
    你好孟老师:
    我对于您的“Java/JSP中调用SQL Server存储过程完整示例 ”有一个疑问想请教下。其中一行您写道 cmd.setString("Other",null);
    如果我要插入默认值(default) 该怎么写呢?我试了很久都没有做出来,请孟老师在百忙中答复我。谢谢

    maidini@163.com
    2008-06-08 08:33:30作者回复
    如果想设置默认值,此处的null改成你的默认值,或者在数据库字段里设置默认值,这里的参数不加入即可
    #maizili 发表于2008-07-05 20:24:08  IP: 123.169.2.*
    孟老师,谢谢你哈,呵呵呵以后得常到你这来逛逛哈 !!
    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © 孟宪会