分享

jdbc创建与调用存储过程

 看风景D人 2016-10-19
     前提:知道Mysql创建存储过程的语法及sql语句,不知道先看一下这方面知识
      http://blog.sina.com.cn/s/blog_52d20fbf0100ofd5.html
1、jdbc创建存储过程
  
Java代码  收藏代码
  1. private static Connection conn = null;  
  2. private static PreparedStatement pstmt = null;  
  3. public static void loginProcedure(){  
  4.         conn = getConnection();     // 这里getConnection方法没列出来,就是连接数据库,返回java.sql.Connection对象引用  
  5.         String procedureSQL = "create procedure USER_EXIST(in loginName varchar(50),out amount int)" +  
  6.             "select count(*) into amount from user where username = loginName ; ";  
  7.         try {  
  8.             pstmt = conn.prepareStatement(procedureSQL);  
  9.             pstmt.executeUpdate();  
  10.         } catch (SQLException e) {  
  11.             // TODO Auto-generated catch block  
  12.             e.printStackTrace();  
  13.         } finally{  
  14.             try {  
  15.                 pstmt.close();  
  16.                 pstmt = null;  
  17.                 conn.close();  
  18.                 conn = null;  
  19.             } catch (SQLException e) {  
  20.                 // TODO Auto-generated catch block  
  21.                 e.printStackTrace();  
  22.             }  
  23.               
  24.         }  
  25.         }  

   主要是存储过程的sql语句的书写,其实写法和普通的jdbc书写sql语句一样,只是存储过程的纯sql语句本来就复杂些,特别是存储过程比较复杂的时候,jdbc的sql语句写法就要好好注意了,不过只要数据库的存储过程sql语句清楚的话,jdbc书写也还是简单的;
上面的String procedureSQL是简化的写法,一般化的写法如下:
  
Java代码  收藏代码
  1. String procedureSQL = " create procedure USER_EXIST(in loginName varchar(50),out amount int)" +   
  2.             " begin" +   
  3.             " declare middleVariable int;" +    //声明中间变量,用到的话就声明  
  4.             " select count(*) into amount from user where username = loginName;" +  
  5.             " end;" ;  
  6.         //在begin和end之间可以进行逻辑代码的书写  

   当然,不能把凑起来的sql语句直接放到数据库中执行来检验是否正确,因为她解析不过来,需要按如下方式在数据库中输入
  
Java代码  收藏代码
  1. mysql> delimiter $$                        
  2. mysql> create procedure USER_EXIST(in loginName varchar(50),out amount int)  
  3.     -> begin  
  4.     -> declare middleVariable int;  
  5.     -> select count(*) into amount from user where username = loginName;  
  6.     -> end  
  7.     -> $$  
  8. Query OK, 0 rows affected (0.00 sec)  
  9.   
  10. mysql> delimiter ;  

   delimiter $$是将Mysql的语句结束符改成$$,这样在创建存储过程中就能使用分号了(分号默认是Mysql的语句结束符) 最后delimiter ;是还原Mysql语句结束符
2、调用存储过程
  
Java代码  收藏代码
  1. private static Connection conn = null;  
  2.     private static PreparedStatement pstmt = null;  
  3. private static CallableStatement cstmt = null;  
  4. String username = "132";          
  5.     conn = getConnection();  
  6.     try {  
  7.         cstmt = conn.prepareCall("{call USER_EXIST(?,?)}");  
  8.         cstmt.setString(1, username);  
  9.         cstmt.registerOutParameter(2, Types.INTEGER);   //注册输出参数  
  10.         cstmt.execute();  
  11.         System.out.println(cstmt.getInt(2));            //与上注册的对应  
  12.   
  13.     } catch (SQLException e) {  
  14.         e.printStackTrace();  
  15.     } finally{  
  16.         try {  
  17.             cstmt.close();  
  18.             cstmt = null;  
  19.             conn.close();  
  20.             conn = null;  
  21.         } catch (SQLException e) {  
  22.             e.printStackTrace();  
  23.         }  
  24.     }  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章