Java 调用MySQL存储过程简单实现

[b]
最近,在忙着换一份工作,面试的时候,被一个话题卡住了,也许是我之前做的项目没有使用过存储过程吧,所以,就相对来说陌生了,被一个考官问得很失底气,遂我决定研究一番,原来是这么的简单,下文记录一下这个历程,以后看一下就一目了然了
[/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]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值