"这份学习资料主要涵盖了Java中的存储过程使用,以及JDBC的基础知识,包括JDBC的接口和类、数据库连接步骤、驱动管理、创建SQL语句等。同时,资料还展示了如何在MySQL中创建和调用存储过程的示例。"
在Java编程中,JDBC(Java Database Connectivity)是用于与各种数据库进行交互的一组接口和类,它是Java Standard Edition(J2SE)的一部分,包含在java.sql和javax.sql包中。JDBC提供了一种标准的方式来连接、查询和操作数据库。
连接数据库通常涉及以下步骤:
1. 注册驱动:这一步是为了使Java知道使用哪个数据库驱动。推荐使用`Class.forName()`方法,它不会直接依赖特定的驱动类。例如,`Class.forName("oracle.jdbc.driver.OracleDriver")`用于注册Oracle数据库驱动。
2. 建立连接:通过`DriverManager.getConnection()`方法创建数据库连接,需要提供URL、用户名和密码。URL通常包含数据库的子协议、子名称、主机名、端口和数据库名,例如`jdbc:oracle:thin:@127.0.0.1:1521:ORCL`。
3. 创建SQL语句:可以使用`Statement`或`PreparedStatement`对象。`Statement`用于执行静态SQL语句,而`PreparedStatement`则允许预编译SQL语句,提高性能并防止SQL注入。
4. 执行语句:调用`executeQuery()`或`executeUpdate()`方法执行SQL查询或更新操作。
5. 处理结果:对于查询操作,结果通常是一个`ResultSet`对象,可以遍历获取数据。
6. 释放资源:执行完操作后,记得关闭`ResultSet`、`Statement`和`Connection`,以避免资源泄漏。
存储过程是数据库中预先编译好的一组SQL语句,可以在需要时调用,提高了效率和代码复用。在Java中,可以使用`CallableStatement`来调用存储过程,它扩展自`PreparedStatement`。例如,`connection.prepareCall("{call psname(?,?,?)}")`用于创建一个CallableStatement对象,然后设置参数,注册输出参数,最后执行存储过程。
在MySQL中创建存储过程的语法如下:
```sql
DELIMITER $$
DROP PROCEDURE IF EXISTS `test`.`addUser` $$
CREATE PROCEDURE `test`.`addUser` (in name varchar(255), in age int, out id int)
BEGIN
insert into user(`name`,`birth_day`,`ver`) values(name,now(), age);
select last_insert_id() into id;
END $$
DELIMITER ;
```
这个存储过程接受一个姓名和年龄作为输入参数,插入一条新记录,并将新插入记录的ID作为输出参数返回。
调用存储过程时,可以这样设置参数和获取输出参数:
```java
CallableStatement cs = connection.prepareCall("{call test.addUser(?, ?, ?)}");
cs.setString(1, "John");
cs.setInt(2, 30);
cs.registerOutParameter(3, Types.INTEGER);
cs.execute();
int insertedId = cs.getInt(3);
```
这里,`registerOutParameter()`用于注册输出参数,`Types.INTEGER`是Java中表示整型数据类型的常量。执行存储过程后,可以通过索引获取输出参数的值。