zoukankan      html  css  js  c++  java
  • JDBC之存储过程

    存储过程的语法创建就不说了,这里这篇博客 就挺详细了http://blog.sina.com.cn/s/blog_52d20fbf0100ofd5.html。

    1. Java代码调用没有参数的存错过程

      首显示创建一个个存储过程:

    DELIMITER $$
    
    USE `jdbcdemo`$$
    
    DROP PROCEDURE IF EXISTS `selectAll`$$
    
    CREATE DEFINER=`root`@`localhost` PROCEDURE `selectAll`()
    BEGIN
    SELECT * FROM boy; 得到所有的数据
        END$$
    
    DELIMITER ;

     其次在代码中调用这个存储过程,当然首先还是获得数据库的连接。 获取连接在上一片博客中http://www.cnblogs.com/xlurenjia/p/5901983.html。

    Java 中的代码

    public List<Boy> querayProcedure(){
            List<Boy> list = new ArrayList<>();
            Connection conn = DBUtil.getConnection();
            try {
                CallableStatement statement = conn.prepareCall("call selectAll()"); 调用存储过程
                statement.execute();
                ResultSet rs = statement.getResultSet();  // 获得结果集,其余操作就跟平常的操作都一样了
                while (rs.next()) {
                    String name = rs.getString("user_name");
                    Boy gd = new Boy();
                    gd.setUser_name(name);
                    list.add(gd);
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            return list;
        }

    2. 有带IN参数的存储过程

    DELIMITER $$
    
    USE `jdbcdemo`$$
    
    DROP PROCEDURE IF EXISTS `select_filter`$$
    
    CREATE DEFINER=`root`@`localhost` PROCEDURE `select_filter`(IN sp_name VARCHAR(20))
    BEGIN
        IF sp_name IS NULL OR sp_name = '' THEN
          SELECT * FROM boy;
            ELSE
          IF LENGTH(sp_name) = 11 AND SUBSTRING(sp_name, 1, 1)=1 THEN
            SELECT * FROM boy WHERE mobile = sp_name;
          ELSE
            SELECT * FROM boy WHERE user_name LIKE CONCAT('%', sp_name, '%');
          END IF;
        END IF;
        END$$
    
    DELIMITER ;

    Java中的代码

    public List<Boy> querayProcedureFilter(String sp_name){
            List<Boy> list = new ArrayList<>();
            Connection conn = DBUtil.getConnection();
            try {
                CallableStatement statement = conn.prepareCall("call select_filter(?)");
                statement.setString(1, sp_name); //将参数穿进去
                statement.execute();
                ResultSet rs = statement.getResultSet();
                while (rs.next()) {
                    String name = rs.getString("user_name");
                    Boy gd = new Boy();
                    gd.setUser_name(name);
                    list.add(gd);
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            return list;
        }

    3. 带有OUT的存储过程

    DELIMITER $$

    USE `jdbcdemo`$$

    DROP PROCEDURE IF EXISTS `select_count`$$

    CREATE DEFINER=`root`@`localhost` PROCEDURE `select_count`( OUT sp_count INT)
    BEGIN
    SELECT COUNT(1)INTO sp_count FROM boy;
    END$$

    DELIMITER ;

    Java中代码

    public int querayCountByProceureOut(){
        
            int count = 0;
            try {
                Connection conn = DBUtil.getConnection();
                CallableStatement cs = conn.prepareCall("call select_count(?)");
                cs.registerOutParameter(1, Types.INTEGER); // 注册你要获得的结果,执行之后获得结果
                cs.execute();
                count = cs.getInt(1);
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            return count;
        }
        
  • 相关阅读:
    sqlserver 脚本生成数据库文档
    在命令行中执行kms命令激活Microsoft Office 2010
    .NET Core项目修改project.json来引用其他目录下的源码等文件的办法 & 解决多框架时 project.json 与 app.config冲突的问题
    asp.net 访问局域网共享文件
    Winform开发框架的重要特性总结
    Winform开发框架之插件化应用框架实现
    Winform开发框架之权限管理系统的改进
    Winform开发框架之统计图表的实现
    在Winform开发框架中实现对数据库的加密支持
    Winform开发框架之通用高级查询模块
  • 原文地址:https://www.cnblogs.com/xlurenjia/p/5905822.html
Copyright © 2011-2022 走看看