Java调用MySQL存储过程并获得返回值的方法

时间:2020-11-13 10:49:24 JAVA认证 我要投稿

Java调用MySQL存储过程并获得返回值的方法

  本文yjbys小编为大家主要介绍了Java调用MySQL存储过程并获得返回值的方法,实例分析了java实现MySQL存储过程的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下

  本文实例讲述了Java调用MySQL存储过程并获得返回值的方法。分享给大家供大家参考。具体如下:

  private void empsInDept(Connection myConnect, int deptId) throws SQLException {

  CallableStatement cStmt = myConnect.prepareCall("{CALL sp_emps_in_dept(?)}");

  cStmt.setInt(1, deptId);

  cStmt.execute();

  ResultSet rs1 = cStmt.getResultSet();

  while (rs1.next()) {

  System.out.println(rs1.getString("department_name") + " " + rs1.getString("location"));

  }

  rs1.close();

  /* process second result set */

  if (cStmt.getMoreResults()) {

  ResultSet rs2 = cStmt.getResultSet();

  while (rs2.next()) {

  System.out.println(rs2.getInt(1) + " " + rs2.getString(2) + " " + rs2.getString(3));

  }

  rs2.close();

  }

  cStmt.close();

  }

  本文实例讲述了java调用mysql存储过程的`方法。分享给大家供大家参考。具体如下:

  数据库的测试代码如下 :

  1、新建表test

  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、调用方法:

  CallableStatement cStmt = conn.prepareCall("{call p_test()}");

  cStmt.executeUpdate();

  import java.sql.*;

  /**

  iGoder

  */

  public class ProcedureTest {

  /*

  表和存储过程定义如下:

  delimiter //

  DROP TABLE if exists test //

  CREATE TABLE test(

  id int(11) NULL

  ) //

  drop procedure if existssp1 //

  create procedure sp1(in p int)

  comment 'insert into a int value'

  begin

  declare v1 int;

  set v1 = p;

  insert into test(id) values(v1);

  end

  //

  drop procedure if exists sp2 //

  create procedure sp2(out p int)

  begin

  select max(id) into p from test;

  end

  //

  drop procedure if exists sp6 //

  create procedure sp6()

  begin

  select * from test;

  end//

  */

  public static void main(String[] args) {

  //callIn(111);

  //callOut();

  callResult();

  }

  /**

  * 调用带有输入参数的存储过程

  * @param in stored procedure input parametervalue

  */

  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();

  }

  }

  }

  /**

  * 调用带有输出参数的存储过程

  *

  */

  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();

  }

  }

  }

  /**

  * 调用输出结果集的存储过程

  */

  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();

  }

  }

  }

  }

  /**

  *获取数据库连接的类

  */

  import java.sql.Connection;

  import java.sql.DriverManager;

  import java.sql.PreparedStatement;

  import java.sql.ResultSet;

  import java.sql.SQLException;

  import java.sql.Statement;

  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=8859_1";

  conn= DriverManager.getConnection(url);

  } catch (Exception e) {

  e.printStackTrace();

  }

  return conn;

  }

  }

  希望本文所述对大家的java程序设计有所帮助。

【Java调用MySQL存储过程并获得返回值的方法】相关文章:

1.Java中调用Oracle包的过程

2.Java怎么编写Oracle存储过程

3.跟踪Java执行过程的方法

4.Java如何调用WebService

5.java调用cmd命令大全

6.Java调用Linux命令行

7.java程序中如何调用linux命令

8.巧克力的存储方法