JDBC调用MySQL5存储过程

一、环境

MySQL5.1

mysql-connector-java-5.1.10

jdk1.5

create table user (
         id int(11) not null auto_increment,
         name varchar(50) not null,
         pswd varchar(50) default null,
         pic longblob,
         remark longtext,
         primary key (id)
);

二、写存储过程

DELIMITER $
DROP PROCEDURE IF EXISTS testprocedure $
CREATE DEFINER=`vcom`@`%` PROCEDURE testprocedure(in in_name varchar (20),in in_pswd varchar(20),out out_id bigint)
BEGIN
     insert into user(name,pswd) values(in_name,in_pswd);
     select last_insert_id() into out_id;
END $
DELIMITER ;

三、JDBC调用存储过程

import lavasoft.common.DBToolkit;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Types;
/**
* JDBC调用MySQL5存储过程
*
* @author leizhimin 2009-12-4 10:33:12
*/
public class ProcedureTest {
         public static void main(String[] args) {
                 testExeProcedure();
         }
         public static void testExeProcedure() {
                 Connection conn =  DBToolkit.getConnection();
                 //创建调用存储过程的预定义SQL语句
                 String sql = "{call testprocedure (?,?,?)}";
                 try {
                         //创建过程执行器
                         CallableStatement cstmt =  conn.prepareCall(sql);
                         //设置入参和出参
                         cstmt.setString(1,  "wangwu");
                         cstmt.setString(2,  "111111");
                         cstmt.registerOutParameter (3, Types.BIGINT); //注册出参
                         cstmt.executeUpdate();
                         //获取输出参数值(两种方式 都行)
                         Long id = cstmt.getLong (3);
                         //Long id =  cstmt.getLong("out_id");
                         System.out.println("本次插 入数据的id=" + id);
                 } catch (SQLException e) {
                         e.printStackTrace();
                 } finally {
                         DBToolkit.closeConnection (conn);
                 }
         }
}

运行后,控制台:

本次插入数据的id=1

Process finished with exit code 0

Java调用存储过程很容易,但是开发存储过程比较困难,我也基本上没写过MySQL的存 储过程,写上面的存储过程参看了下面一篇博文:

http://www.blogjava.net/sxyx2008/archive/2009/11/24/303497.html

出处:http://lavasoft.blog.51cto.com/62575/238613

时间: 2025-01-21 05:08:58

JDBC调用MySQL5存储过程的相关文章

jdbc调用mysql存储过程实现代码_Mysql

1. 创建存储过程 建立一个MySQL的存储过程 add_pro 复制代码 代码如下: delimiter // drop procedure add_pro // create procedure add_pro(a int , b int , out sum int ) begin set sum = a * b; end; // 2. 调用存储过程 复制代码 代码如下: package com.zhanggaosong; import java.sql.CallableStatement;

php调用mysql5存储过程方法

1.调用存储过程的方法. a.如果存储过程有 IN/INOUT参数,声明一个变量,输入参数给存储过程,该变量是一对, 一个php变量(也可以不必,只是没有php变量时,没有办法进行动态输入),一个Mysql 变量. b.如果存储过程有OUT变量,声明一个Mysql变量. mysql变量的声明比较特殊,必须让mysql服务器知道此变量的存在,其实也就是执行一条mysql语句. 入set @mysqlvar=$phpvar ; c.使用mysql_query()/mysql_db_query()执行

java使用jdbc调用存储过程,没有返回结果集。。

问题描述 java使用jdbc调用存储过程,没有返回结果集.. 整个过程是这样的:之前的程序已经上线运行了.后来客户数据库升级,从sqlServer2005升级到sqlServer2008.当然系统也做了相应改动.我们是第三方软件,调用他们的数据库中的存储过程来查询数据.他们升级完系统和数据库之后,我们就查询数据报错.然后最先报的错是驱动版本问题.我就到网上下了sqljdbc4.jar.替换了之后不再报驱动的问题.但是一直无结果集.于是我直接把调用存储过程的sql语句放到数据库中执行.是能查到结

weblogic下JDBC调用含有自定义类型参数的存储过程乱码

问题描述 JDBC方式调用oracle存储过程,存储过程有个自定义类型的参数,如下为代码段,标红那行转换后之后,在TOMCAT下面正常,部署到weblogic下面,转换结果为乱码,我们按照网上的说法,替换过两个包:nls_charset12.jar.orai18n.jar,问题仍然没能解决,求大礼解答!ARRAY是oracle.sql.ARRAY这个类.publicStringSp_wms_transfer(StringsBillno,StringcustomerID,Stringtransfe

mysql5存储过程入门创建,删除,调用详解

一.创建存储过程 1.基本语法: create procedure sp_name() begin ......... end   2.参数传递 二.调用存储过程 1.基本语法:call sp_name()  CALL语句(存储过程的调用) CALL 存储过程名(参数列表)   CALL语句调用一个先前用CREATE PROCEDURE创建的程序. CALL语句可以用声明为OUT或的INOUT参数的参数给它的调用者传回值. 存储过程名称后面必须加括号,哪怕该存储过程没有参数传递 注意:存储过程名

Spring 调用ORACLE存储过程的结果集

oracle|存储过程 oracle 对于高级特性总是与众不同(我极力讨厌这一点,如果使用它的产品就要对这种产品进行特定的编程,这也是我从不看好weblogic之类的平台的原因),大对象存取一要定用它自己的LOB对象,所幸我还能通过LONG RAW来代替.以便能使程序不需要特定的编码.但对于存储过程(我是说返回结果集的存储过程),我还没有什么方法能用一个通用的程序来处理ORACLE.太多的教材或文章在讲存储过程的调用只是不负责任地简单执行一些涵数或无结果返回的存储过程,使大多数读者根本不知道到底

Spring调用Oracle存储过程的结果集

oracle 对于高级特性总是与众不同(我极力讨厌这一点,如果使用它的产品就要对这种产品进行特定的编程,这也是我从不看好weblogic之类的平台的原因),大对象存取一要定用它自己的LOB对象,所幸我还能通过LONG RAW来代替.以便能使程序不需要特定的编码.但对于存储过程(我是说返回结果集的存储过程),我还没有什么方法能用一个通用的程序来处理ORACLE.太多的教材或文章在讲存储过程的调用只是不负责任地简单执行一些涵数或无结果返回的存储过程,使大多数读者根本不知道到底如何调用存储过程的结果集

java调用mysql存储过程实例分析

  本文实例讲述了java调用mysql存储过程的方法.分享给大家供大家参考.具体如下: 数据库的测试代码如下 : 1.新建表test ? 1 2 3 4 5 create table test( field1 int not null ) TYPE=MyISAM ; insert into test(field1) values(1); 2.删除已存在的存储过程: ? 1 2 3 -- 删除储存过程 delimiter // -- 定义结束符号 drop procedure p_test; 3

weblogic连接池-Java调用Oracle存储过程传入数组参数报错

问题描述 Java调用Oracle存储过程传入数组参数报错 weblogic连接池 JNDI提供的链接保存 Oracle数组 报错 oracle.jdbc.driver.T4CConnection cannot be cast to oracle.jdbc.OracleConnection oracle.jdbc.driver.T4CConnection cannot be cast to oracle.jdbc.OracleConnection 大家好,我在用weblogic连接池 JNDI