[b]
最近,在忙着换一份工作,面试的时候,被一个话题卡住了,也许是我之前做的项目没有使用过存储过程吧,所以,就相对来说陌生了,被一个考官问得很失底气,遂我决定研究一番,原来是这么的简单,下文记录一下这个历程,以后看一下就一目了然了
[/b]
[quote]
[b]附件说明[/b]
附件中包含了JDBC使用到的mysql驱动包和小生研究的简单调用代码
[/quote]
[quote]
[b]首先是,创建数据库--sqlStudy[/b]
[b]接着创建表--user[/b]
[b]插入几条数据[/b]
检验下插入的数据吧:
[b]然后,创建存储过程--findById[/b]
MySQL存储过程语法详见:[url]http://www.blogjava.net/sxyx2008/archive/2009/11/24/303497.html[/url]
如果报错的话,请检查一下语句是否写错了!此时,可以测试一下我们的存储过程:
你会发现,第三条记录出来了!
[/quote]
[quote]
[b]下面是JAVA中使用JDBC操作存储过程代码[/b]
结果:
取得的id为:1
取得的name为:First
[/quote]
最近,在忙着换一份工作,面试的时候,被一个话题卡住了,也许是我之前做的项目没有使用过存储过程吧,所以,就相对来说陌生了,被一个考官问得很失底气,遂我决定研究一番,原来是这么的简单,下文记录一下这个历程,以后看一下就一目了然了
[/b]
[quote]
[b]附件说明[/b]
附件中包含了JDBC使用到的mysql驱动包和小生研究的简单调用代码
[/quote]
[quote]
[b]首先是,创建数据库--sqlStudy[/b]
CREATE DATABASE sqlStudy;
[b]接着创建表--user[/b]
CREATE TABLE user
(
id int(10) NOT NULL PRIMARY KEY ATUO_INCREMENT,
name char(50) NOT NULL
)
[b]插入几条数据[/b]
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;
[b]然后,创建存储过程--findById[/b]
MySQL存储过程语法详见:[url]http://www.blogjava.net/sxyx2008/archive/2009/11/24/303497.html[/url]
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);
你会发现,第三条记录出来了!
[/quote]
[quote]
[b]下面是JAVA中使用JDBC操作存储过程代码[/b]
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
[/quote]