JDBC CallableStatement实例

广告位

以下是使用CallableStatement以及MySQL存储过程:getEmpName()的示例 &#821…

以下是使用CallableStatement以及MySQL存储过程:getEmpName()的示例 –

确保已经在EMP数据库中创建了getEmpName()存储过程,可以使用MySQL查询来创建 –

DELIMITER $$    DROP PROCEDURE IF EXISTS `EMP`.`getEmpName` $$  CREATE PROCEDURE `EMP`.`getEmpName`      (IN EMP_ID INT, OUT EMP_FIRST VARCHAR(255))  BEGIN     SELECT first INTO EMP_FIRST     FROM Employees     WHERE ID = EMP_ID;  END $$    DELIMITER ;  

查询emp数据库的所有存储过程,如下语句 –

mysql>  select `name` from mysql.proc where db = 'emp' and `type` = 'PROCEDURE';  +------------+  | name       |  +------------+  | getEmpName |  +------------+  1 row in set (0.00 sec)  

此示例代码是基于前面章节中完成的环境和数据库设置编写的。复制以下示例代码到JDBCCallableStatement.java中编译,并运行如下 –

  //STEP 1. Import required packages  import java.sql.*;    public class JDBCCallableStatement {     // JDBC driver name and database URL     static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";       static final String DB_URL = "jdbc:mysql://localhost/EMP";       //  Database credentials     static final String USER = "root";     static final String PASS = "123456";       public static void main(String[] args) {     Connection conn = null;     CallableStatement stmt = null;     try{        //STEP 2: Register JDBC driver        Class.forName("com.mysql.jdbc.Driver");          //STEP 3: Open a connection        System.out.println("Connecting to database...");        conn = DriverManager.getConnection(DB_URL,USER,PASS);          //STEP 4: Execute a query        System.out.println("Creating statement...");        String sql = "{call getEmpName (?, ?)}";        stmt = conn.prepareCall(sql);          //Bind IN parameter first, then bind OUT parameter        int empID = 102;        stmt.setInt(1, empID); // This would set ID as 102        // Because second parameter is OUT so register it        stmt.registerOutParameter(2, java.sql.Types.VARCHAR);          //Use execute method to run stored procedure.        System.out.println("Executing stored procedure..." );        stmt.execute();          //Retrieve employee name with getXXX method        String empName = stmt.getString(2);        System.out.println("Emp Name with ID:" +                  empID + " is " + empName);        stmt.close();        conn.close();     }catch(SQLException se){        //Handle errors for JDBC        se.printStackTrace();     }catch(Exception e){        //Handle errors for Class.forName        e.printStackTrace();     }finally{        //finally block used to close resources        try{           if(stmt!=null)              stmt.close();        }catch(SQLException se2){        }// nothing we can do        try{           if(conn!=null)              conn.close();        }catch(SQLException se){           se.printStackTrace();        }//end finally try     }//end try     System.out.println("Goodbye!");  }//end main  }//end JDBCExample  

现在编译上面例子中的代码,如下 –

F:workspjdbc>  F:workspjdbc>javac -Djava.ext.dirs=F:workspjdbclibs JDBCCallableStatement.java  

运行JDBCCallableStatement时,会产生以下结果 –

F:workspjdbc>java -Djava.ext.dirs=F:workspjdbclibs JDBCCallableStatement  Connecting to database...  Wed May 31 03:49:50 CST 2017 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.  Creating statement...  Executing stored procedure...  Emp Name with ID:102 is Xueyou  Goodbye!    F:workspjdbc>  

  

拾荒的老头

关于作者: 拾荒的老头

为您推荐