最近,在忙着换一份工作,面试的时候,被一个话题卡住了,也许是我之前做的项目没有使用过存储过程吧,所以,就相对来说陌生了,被一个考官问得很失底气,遂我决定研究一番,原来是这么的简单,下文记录一下这个历程,以后看一下就一目了然了
引用
附件说明
附件中包含了JDBC使用到的mysql驱动包和小生研究的简单调用代码
引用
首先是,创建数据库--sqlStudy
CREATE DATABASE sqlStudy;
接着创建表--user
CREATE TABLE user ( id int(10) NOT NULL PRIMARY KEY ATUO_INCREMENT, name char(50) NOT NULL )
插入几条数据
USE sqlStudy; INSERT INTO user VALUES(id,'first'); INSERT INTO user VALUES(id,'second'); INSERT INTO user VALUES(id,'third'); INSERT INTO user VALUES(id,'fourth'); INSERT INTO user VALUES(id,'fifth'); INSERT INTO user VALUES(id,'sixth');
检验下插入的数据吧:
SELECT * FROM user;
然后,创建存储过程--findById
MySQL存储过程语法详见: http://www.blogjava.net/sxyx2008/archive/2009/11/24/303497.html
DELIMITER //;--这个是设置mysql的分隔符,默认mysql是; DROP PROCEDURE IF EXISTS findById// CREATE PROCEDURE findById(IN param int)--IN传入参数进来 BEGIN SELECT * FROM user WHERE id = param ; END//
如果报错的话,请检查一下语句是否写错了!此时,可以测试一下我们的存储过程:
SET @param=3// CALL findById(@param);
你会发现,第三条记录出来了!
引用
下面是JAVA中使用JDBC操作存储过程代码
import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import com.mysql.jdbc.CallableStatement; import com.mysql.jdbc.Connection; public class CallProcedure { private static final String USERNAME = "root"; private static final String PASSWORD = ""; private static final String URL = "jdbc:mysql://localhost:3306/sqlstudy"; public static void call(){ loadMySqlDriver(); Connection conn = null; CallableStatement cstmt = null; ResultSet rs = null; try{ conn = (Connection) DriverManager .getConnection(URL , USERNAME , PASSWORD); //创建调用存储过程的预定义SQL语句 String sql = "{call findById(?)}"; //创建过程执行器 cstmt = (CallableStatement) conn.prepareCall(sql); //设置入参 cstmt.setString(1,"1"); cstmt.executeUpdate(); rs = cstmt.getResultSet(); while(rs.next()){ int id = rs.getInt(1); String name = rs.getString(2); System.err.println("取得的id为:"+id+"\n"+"取得的name为:"+name); } }catch(SQLException se){ System.out.println("数据库连接失败!"); se.printStackTrace() ; }finally{ if(rs != null){ // 关闭记录集 try{ rs.close() ; }catch(SQLException e){ e.printStackTrace() ; } } if(cstmt != null){ // 关闭声明 try{ cstmt.close() ; }catch(SQLException e){ e.printStackTrace() ; } } if(conn != null){ // 关闭连接对象 try{ conn.close() ; }catch(SQLException e){ e.printStackTrace() ; } } } } /** * 加载MySql驱动 */ public static void loadMySqlDriver(){ try{ //加载MySql的驱动类 Class.forName("com.mysql.jdbc.Driver") ; }catch(ClassNotFoundException e){ System.out.println("找不到驱动程序类 ,加载驱动失败!"); e.printStackTrace() ; } } public static void main(String[] args) { // TODO Auto-generated method stub call(); } }
结果:
取得的id为:1
取得的name为:First