Java通过JDBC调用SQL Server存储过程详解:无参与带参操作

需积分: 9 1 下载量 184 浏览量 更新于2024-10-03 收藏 43KB DOC 举报
Java调用存储过程是Java应用程序与SQL Server数据库交互的重要环节,特别是在处理复杂业务逻辑和数据操作时。本文主要讲解了如何在Java中通过JDBC (Java Database Connectivity) API来调用存储过程,包括无参数和有参数两种情况。 首先,对于不带参数的存储过程,Java开发者可以使用`call` SQL语法。在JDBC中,调用存储过程的语句格式如下: ```java String callStatement = "{call procedure-name}"; ``` 例如,如果有一个名为`ContactFormalNames`的存储过程,其定义如创建过程所示: ```sql CREATE PROCEDURE ContactFormalNames AS BEGIN SELECT TOP 10 Title + ' ' + FirstName + ' ' + LastName AS FormalName FROM Person.Contact END ``` Java代码中,可以使用`Statement`对象的`executeQuery`方法来执行这个过程,并获取结果集: ```java public static void executeSprocNoParams(Connection con) { try { Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("{call dbo.ContactFormalNames}"); while (rs.next()) { System.out.println(rs.getString("FormalName")); } rs.close(); stmt.close(); } catch (Exception e) { e.printStackTrace(); } } ``` 当需要调用带有输入参数的存储过程时,Java开发者需要使用`Connection`类的`prepareCall`方法,同时结合`call` SQL语法和占位符`?`。调用语法如下: ```java String callStatement = "{call procedure-name[(?[,?])]}"; ``` 这里的`?`是一个占位符,表示要传递的参数值。例如,如果存储过程需要一个名为`firstName`和`lastName`的IN参数,代码会像这样: ```java String firstName = "John"; String lastName = "Doe"; String callStatement = String.format("{call dbo.ContactFormalNames (?, ?)}", firstName, lastName); PreparedStatement pstmt = con.prepareStatement(callStatement); pstmt.setString(1, firstName); pstmt.setString(2, lastName); ResultSet rs = pstmt.executeQuery(); ``` Java调用存储过程的关键在于理解如何构造正确的SQL语句,利用JDBC提供的`Statement`和`PreparedStatement`类进行参数化调用,确保安全性和效率。无论参数是否为空,都需要正确处理异常并关闭资源。在实际开发中,这是一项基础且重要的技能,能够帮助Java开发者更高效地与数据库交互。