1、调用普通存储过程
(1)创建存储过程
CREATE Procedure [dbo].[GetContactListByName]  /*根据联系人姓名获取联系人信息*/
@Name nvarchar(50)
As
begin
    select Contact.Id,Contact.Name,Phone,Email,QQ,GroupName from Contact,ContactGroup
 where Contact.GroupId=ContactGroup.Id and Name like '%'+@Name+'%'  order by Contact.Id desc
end
(2)Java代码
final String DRIVER_CLASS = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
final String DATABASE_URL = "jdbc:sqlserver://127.0.0.1:1433;DatabaseName=AddressList";
final String DATABASE_USRE = "sa";
final String DATABASE_PASSWORD = "1234";
try {
    Class.forName(DRIVER_CLASS);
    Connection connection=DriverManager.getConnection(DATABASE_URL,DATABASE_USRE,DATABASE_PASSWORD);
    CallableStatement callableStatement=connection.prepareCall("{call GetContactListByName(?)}");
    callableStatement.setString(1, name);
    ResultSet resultSet=callableStatement.executeQuery();
    while(resultSet.next()){
        int id=resultSet.getInt(1);
        String string=resultSet.getString(2);
        System.out.println(id+","+string);
    }
} catch (Exception e) {
    // TODO: handle exception
    e.printStackTrace();
}
注意:如果存储过程无参数,则不需要写括号,如
CallableStatement callableStatement=connection.prepareCall("{call GetAllContactGroup}");
        
2、调用包含返回值及输出参数的存储过程
(1)创建存储过程
USE [AddressList]
GO
CREATE PROCEDURE [dbo].[GetGroupById]  /*根据分组编号获取分组信息*/
 @GroupName nvarchar(50) OUTPUT,   /*输出参数*/
 @Memo nvarchar(200) OUTPUT,      /*输出参数*/
 @id int
AS
BEGIN
 select @GroupName=GroupName,@Memo=Memo from ContactGroup where id=@id
 if @@Error<>0
  RETURN -1   /*返回值*/
 else
  RETURN 0   /*返回值*/
END
(2)Java代码
    CallableStatement callableStatement=connection.prepareCall("{?=call GetGroupById(?,?,?)}");
    //返回值
    callableStatement.registerOutParameter(1, Types.INTEGER);
    //输出参数
    callableStatement.registerOutParameter(2, Types.VARCHAR);
    //输出参数
    callableStatement.registerOutParameter(3, Types.VARCHAR);
    //输入参数
    callableStatement.setInt(4, 2);
    callableStatement.execute();
    //获得返回值
    int returnValue=callableStatement.getInt(1);
    //获得输出参数
    String groupName=callableStatement.getString(2);
    //获得输出参数
    String memo=callableStatement.getString(3);
    System.out.println(returnValue);
    System.out.println(groupName);
    System.out.println(memo);
} catch (Exception e) {
    // TODO: handle exception
    e.printStackTrace();
}
3、调用包含输入输出参数的存储过程。
(1)创建存储过程
USE [AddressList]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[test]
 @GroupName nvarchar(50) output
AS
BEGIN
 select @GroupName=GroupName from ContactGroup where GroupName like '%'+@GroupName+'%'
END
(2)Java代码
CallableStatement callableStatement=connection.prepareCall("{call test(?)}");
callableStatement.setString(1, name);
callableStatement.registerOutParameter(1, Types.VARCHAR);
callableStatement.execute();
String string=callableStatement.getString(1);
System.out.println(string);

Java调用SQL Server存储过程的更多相关文章

  1. java 调用 sql server存储过程

    Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用.当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句.这样就可以提高存储过程的性能. Ø ...

  2. Yii2.0调用sql server存储过程并获取返回值

    1.首先展示创建sql server存储过程的语句,创建一个简单的存储过程,测试用. SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE P ...

  3. VS中调用SQL SERVER存储过程

     存储过程是经过编译的,永久保存在数据中的一组SQL语句,通过创建和使用存储过程能够提高程序的重用性和扩展性,为程序提供模块化的功能,还有利于对程序的维护和管理.以下就详谈一下,VB.NET怎样调 ...

  4. Java调用SQL Server的存储过程详解

    转载自Microsoft的官方文档 http://msdn2.microsoft.com/zh-cn/library/ms378995.aspx收录于 www.enjoyjava.net/f25 本文 ...

  5. (转)Java调用SQL Server的存储过程详解

    本文转载自:http://dev.yesky.com/128/8088128.shtml 1使用不带参数的存储过程 使用 JDBC 驱动程序调用不带参数的存储过程时,必须使用 call SQL 转义序 ...

  6. Java调用SQL Server的存储过程详解(转)

    1使用不带参数的存储过程 使用 JDBC 驱动程序调用不带参数的存储过程时,必须使用 call SQL 转义序列.不带参数的 call 转义序列的语法如下所示: 以下是引用片段:{call proce ...

  7. Java的jdbc调用SQL Server存储过程Bug201906131119

    SQL Server数据库存储过程,一个查询使用动态sql,另一个不使用动态sql,这种情况,jdbc可能获取不到实际查询数据,虽然数据库中执行没问题. 解决方法,都使用静态sql,或都使用动态sql ...

  8. qt调用sql server存储过程并获取output参数

    最近新做的一个项目需要使用qt5连接另一台机器上的sql server,虽然网上已有类似文章,但还是有些其中很少提及的问题,故在这里汇总下: qt连接sql server可以参考这篇文章: <Q ...

  9. PHP调用SQL Server存储过程

    一.安装SQL Server Driver for PHP     在微软官网上发现了这个东西,他提供了一套PHP对MS2005/2008操作的全新函数库,并且支持UTF8,作为PHP的扩展运行.看来 ...

随机推荐

  1. java https 请求

    http://li3huo.com/index.php/2009/09/https-certificates-are-ignoring-the-right-java-http-client/

  2. Atitti 过程导向 vs 结果导向 attilax的策略

    Atitit  世界著名零食 1.1. /////milk hand candy , milk soft candy . fruit soft candy1 1.2. ==========cookie ...

  3. javascrip json2

    http://www.json.org/json-zh.html 下载: https://github.com/douglascrockford/JSON-js

  4. 【Unity】7.1 Input类的方法和变量

    分类:Unity.C#.VS2015 创建日期:2016-04-21 一.简介 在Input类中,Key与物理按键对应,例如键盘.鼠标.摇杆上的按键,其映射关系无法改变,程序员可以通过按键名称或者按键 ...

  5. Java 8 – 日期和时间实用技巧

    当你开始使用Java操作日期和时间的时候,会有一些棘手.你也许会通过System.currentTimeMillis() 来返回1970年1月1日到今天的毫秒数.或者使用Date类来操作日期:当遇到加 ...

  6. nil

    Lua中特殊的类型,他只有一个值:nil:一个全局变量没有被赋值以前默认值为nil:给全局变量负nil可以删除该变量.

  7. IBM研究院找到度量安全性方法:容器与虚拟机,谁更安全?

    https://zhuanlan.zhihu.com/p/40446759 虚拟机比容器更安全吗?你可能会有自己的答案,但IBM研究院发现容器的安全性与虚拟机一样,甚至更加安全. 一般来说,从接口宽度 ...

  8. MIME详解

    MIME详解 原文:http://blog.csdn.net/cxm_hwj/article/details/6690058 MIME,英文全称为“Multipurpose Internet Mail ...

  9. Oracle字段类型及存储(一)

    Oracle中2000个byte,并不是2000个字符的意思,1个字符在Oracle中可能是1个byte到4个byte不等,需看数据库字符集的设置了. 对GBK字符集而言,ASCII码中128个字符使 ...

  10. 在Windows上弄一个redis的docker容器

    [本文出自天外归云的博客园] Docker核心概念简介 镜像是一个面向docker引擎的只读模板,包含了文件系统. 镜像是创建容器的基础,容器类似于一个沙箱,用来运行和隔离应用. 容器是从镜像创建的应 ...