【JDBC教程详解】
JDBC(Java Database Connectivity)是Java编程语言中用来规范客户端程序如何访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。本教程将深入讲解JDBC的基本概念、操作流程以及如何在Java中调用SQL Server存储过程。
1. **Java调用存储过程**
存储过程是预编译的SQL语句集合,存储在数据库服务器中,可重复使用,提高了代码执行效率。在Java中调用存储过程,首先需要创建`CallableStatement`对象,通过`prepareCall`方法指定存储过程的调用格式。例如:
```java
CallableStatement cstmt = conn.prepareCall("{call getuserinfo}");
```
其中,`getuserinfo`是存储过程的名称。
2. **SQL Server存储过程**
在SQL Server中,创建一个简单的存储过程如:
```sql
CREATE PROCEDURE getuserinfo AS
SELECT * FROM userinfo;
GO
```
这个存储过程会返回`userinfo`表中的所有列。
3. **Java连接数据库**
我们需要加载数据库驱动并建立到数据库的连接。以下是一个简单的示例:
```java
String url = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=t35db";
String driver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
String name = "";
try {
Class.forName(driver);
Connection conn = DriverManager.getConnection(url, "sa", "sa");
} catch (Exception e) {
e.printStackTrace();
}
```
注意:这里使用的是旧版的SQL Server JDBC驱动,对于较新的SQL Server版本,应使用Microsoft提供的`com.microsoft.sqlserver.jdbc.SQLServerDriver`。
4. **执行存储过程**
使用`CallableStatement`对象的`executeQuery`方法来执行存储过程,并通过`ResultSet`获取结果。例如:
```java
CallableStatement cstmt = conn.prepareCall("{call getuserinfo}");
ResultSet rs = cstmt.executeQuery();
while (rs.next()) {
System.out.println(rs.getString(1) + " " + rs.getString(2));
}
rs.close();
cstmt.close();
conn.close();
```
5. **带返回值的存储过程**
如果存储过程有返回值,可以定义输出参数。比如,一个返回用户信息的存储过程可能需要传入用户ID并返回用户名和密码:
```sql
CREATE PROCEDURE getuserinfo2
(@id int, @userName varchar(20) output, @password varchar(20) output)
AS
BEGIN
SELECT @userName = username, @password = [password]
FROM userinfo
WHERE userid = @id;
END
```
在Java中调用这个存储过程,需要设置输出参数:
```java
cstmt.registerOutParameter(2, Types.VARCHAR);
cstmt.registerOutParameter(3, Types.VARCHAR);
cstmt.setInt(1, userId); // 设置输入参数
cstmt.execute();
String userName = cstmt.getString(2);
String password = cstmt.getString(3);
```
通过以上步骤,我们可以使用JDBC在Java应用程序中高效地与SQL Server数据库进行交互,无论是执行简单的SQL查询还是调用复杂的存储过程。理解这些基本概念和方法,对于进行数据库开发工作至关重要。