java实现调用Mysql存储过程分析代码

yg3n 9年前

存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。Java调用mysql存储过程,实现如下,如果感觉不错希望大家收藏。

 数据库的测试代码如下 :

1、新建表test,sql代码如下:

create table test(  field1 int not null  )  TYPE=MyISAM ;  insert into test(field1) values(1);


2、删除已存在的存储过程,代码如下:

delimiter // -- 定义结束符号  drop procedure p_test;


3、mysql存储过程定义,代码如下:

create procedure p_test()  begin  declare temp int;  set temp = 0;   update test set field1 = values(temp);  end


4、 Java调用带有输入参数的存储过程,代码如下:

public static void callIn(int in){   //获取连接   Connection conn = ConnectDb.getConnection();   CallableStatement cs = null;   try {    //可以直接传入参数    //cs = conn.prepareCall("{call sp1(1)}");    //也可以用问号代替    cs = conn.prepareCall("{call sp1(?)}");    //设置第一个输入参数的值为110    cs.setInt(1, in);    cs.execute();   } catch (Exception e) {    e.printStackTrace();   } finally {    try {    if(cs != null){     cs.close();    }    if(conn != null){     conn.close();    }    } catch (Exception ex) {    ex.printStackTrace();    }   }   }


5、Java调用带有输出参数的存储过程,代码如下:

 public static void callOut() {   Connection conn = ConnectDb.getConnection();   CallableStatement cs = null;   try {    cs = conn.prepareCall("{call sp2(?)}");    //第一个参数的类型为Int    cs.registerOutParameter(1, Types.INTEGER);    cs.execute();    //得到第一个值    int i = cs.getInt(1);    System.out.println(i);   } catch (Exception e) {    e.printStackTrace();   } finally {    try {    if(cs != null){     cs.close();    }    if(conn != null){     conn.close();    }    } catch (Exception ex) {    ex.printStackTrace();    }   }   }


6、Java调用输出结果集的存储过程,代码如下:

public static void callResult(){   Connection conn = ConnectDb.getConnection();   CallableStatement cs = null;   ResultSet rs = null;   try {    cs = conn.prepareCall("{call sp6()}");    rs = cs.executeQuery();    //循环输出结果    while(rs.next()){    System.out.println(rs.getString(1));    }   } catch (Exception e) {    e.printStackTrace();   } finally {    try {    if(rs != null){     rs.close();    }    if(cs != null){     cs.close();    }    if(conn != null){     conn.close();    }    } catch (Exception ex) {    ex.printStackTrace();    }   }   }  }


7、Java获取数据库连接的工具类,代码如下: 

import java.sql.Connection;  import java.sql.DriverManager;  import java.sql.PreparedStatement;  import java.sql.ResultSet;  import java.sql.SQLException;  import java.sql.Statement;   public class ConnectDb {   public static Connection getConnection(){   Connection conn = null;   PreparedStatement preparedstatement = null;   try {    Class.forName("org.gjt.mm.mysql.Driver").newInstance();     String dbname = "test";    String url="jdbc:mysql://localhost/dbname?user=root&password=root&useUnicode=true&characterEncoding=utf-8";    conn= DriverManager.getConnection(url);   } catch (Exception e) {    e.printStackTrace();   }    return conn;   }   }