zoukankan      html  css  js  c++  java
  • (十八)JDBC获取存储过程和主键

    目录


    获取数据库自动生成的主键;

    update 更新操作以后,如果需要用到结果集,可以通过 PreparedStatement.getResultSet()方法获得结果集;

    getGeneratedKeys(); 获取执行完插入语句后自动生成的键,结果封装在一个结果集里面;

    PreparedStatement 对象,进行预编译的时候,可以接受2个参数,第二个参数表示是否自动获得自动生成的键,mysql 默认是自动获得 ;

    但是我们还是自己写上,毕竟不同厂商之间实现不同;mysql 默认获得,兴许 oracle 默认就不获得;

    获得的结果,封装在一个 结果集 里面。然后调用 PreparedStatement.getGeneratedKeys(); 拿到这个结果集 ;

    代码演示:

    
            Connection connection = null;
            PreparedStatement statement = null;
            ResultSet resultSet = null;
    
            try {
                connection = JdbcUtils.getConnection();
                String sql = "INSERT INTO testBlob(image) VALUES(?)";
                // 接受2个参数,第二个参数,是否自动获得自动生成的键
                statement = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
    
                File file = new File("src/ijava/xin/images/th2.jpg");
                InputStream inputStream = new FileInputStream(file);
    
                statement.setBinaryStream(1, inputStream);
    
                int num = statement.executeUpdate();
    
    
                if(num>0){
                    //  获取 封装了自动生成的键的结果集 
                    resultSet = statement.getGeneratedKeys() ;
                    if (resultSet.next()){
    //                    这里我不知道,它返回的结果集中自动生成的键的名字是什么。
    //                    反正我写id  不对,那么就只能使用 下标获取了,写了 1 ;
                        System.out.println(resultSet.getInt(1));
                    }
                }
    
    
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                JdbcUtils.closedConnection(resultSet, statement, connection);
    
            }

    上述的操作,仅对 insert 有效,毕竟只有插入操作,才会生成键 ;


    JDBC调用存储过程

    • 存储过程是什么?

      存储过程就相当于方法一样,只是这个方法是数据里面的方法,可以理解为数据库里面的处理数据的方法;
      
      
      目前只需要会调用存储过程即可;以后在oracle课程中会将存储过程的细节;存储过程在金融证券中用到多 ;
      
      写于 2018年5月31日00:00:05;
      
      。
      
    • 调用存储过程

    首先需要先获得 CallableStatement 对象 ,并调用存储过程;

    CallableStatement cStmt = conn.prepareCall("{call demoSp(?,?)}") ;  // 参数是存储过程的名字 ;

    设置参数注册返回值,得到输出 ;

    
        // 设置参数
        cStmt.setString(1,"abcdef") ;
    
        // 告诉mysql,存储过程的第二个参数是字符串
        cStmt.registerOutParameter(2,Type.VARCHAR) ; 
    
        // 执行存储过程
    
        // 获取存储过程的返回结果
        Sout(cStmt.getString(2)) ;
    

    15天第8个视频,删除表的时候,老方说,防止下一期班再用这个表;
    然后又突然说,没有下一期班了,你们是最后一期班了,以后不讲课了;以后专职做管理去了,下面人说,升官了….;老方说,什么啊。。

  • 相关阅读:
    python面向对象__call__
    python的上下文管理协议
    python析构方法__del__
    next和iter可迭代协议
    __slots__ 用法
    定制自己的数据类型
    内置的Attr系列
    反射和自省
    isinstance和issubclass
    BLE 学习
  • 原文地址:https://www.cnblogs.com/young-youth/p/11665703.html
Copyright © 2011-2022 走看看