第一步:定义存储过程(注意:不同MySQL定义存储过程语法有差异)
DELIMITER $$ DROP PROCEDURE IF EXISTS `jdbc`.`addUser` $$ CREATE PROCEDURE `jdbc`.`addUser` (IN `pname` varchar(45),IN `birthday` date,IN `money` float,OUT `pid` int) BEGIN insert into user(`name`,`birthday`,`money`) values(pname, birthday, money); select last_insert_id() into id; END $$ DELIMITER ; 第二步:编写Java代码进行测试 package cn.itcast.jdbc; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Types; import org.junit.Test; /** * JDBC之调用存储过程 */ public class CallableStatementTest { @Test public void testCs() throws SQLException { csTest(); } /** * 测试调用存储过程 * @throws SQLException */ static void csTest() throws SQLException { Connection conn = null; CallableStatement cs = null; ResultSet rs = null; try { //建立连接 conn = JdbcUtils.getConnection(); //即使没有参数,下面这行也需要括号 String sql = "{ call addUser(?, ?, ?, ?)}"; cs = conn.prepareCall(sql); //设置输出参数 cs.registerOutParameter(4, Types.INTEGER); cs.setString(1, "ps name");//设置第一个参数 cs.setDate(2, new java.sql.Date(System.currentTimeMillis())); cs.setFloat(3, 100f); cs.executeUpdate(); //获取输出结果 int id = cs.getInt(4); System.out.println("id=" + id); } finally { //因为CallableStatement是继承自PreparedStatement, //所以可以直接传入关闭 JdbcUtils.free(rs, cs, conn); } } }