zoukankan      html  css  js  c++  java
  • JDBC 学习笔记(九)—— ResultSetMetaData

    ResultSet 提供了一个 getMetaData() 方法,用来获取 ResultSet 对应的 ResultSetMetaData 对象:

    ResultSetMetaData getMetaData() throws SQLException;
    

    MetaData 即元数据,就是描述其他数据的数据。

    ResultSetMetaData 封装了描述 ResultSet 对象的数据,内部提供了大量的方法来分析 ResultSet 的返回信息,其中最常用的有以下三个方法:

        int getColumnCount() throws SQLException;
    
        String getColumnName(int column) throws SQLException;
    
        int getColumnType(int column) throws SQLException;
    • getColumnCount: 返回该 ResultSet 的列数量。
    • getColumnName: 返回指定索引的列名。
    • getColumnType: 返回指定索引的列类型。

    虽然 ResultSetMetaData 对于分析查询结果有很大的便宜,但是它会消耗一定的系统开销,所以如果使用 ResultSet 就足以完成对查询结果的处理,就没有必要使用 ResultSetMetaData。

    最后一点需要注意的是,无论是 ResultSet 还是 ResultSetMetaData,都是需要释放资源的。

    换言之,对于查询结果的分析一定要在释放资源之前完成,所以以下代码的写法是错误的:

    package com.gerrard.demo;
    
    import com.gerrard.constants.ErrorCode;
    import com.gerrard.exception.JdbcSampleException;
    import com.gerrard.util.Connector;
    import com.gerrard.util.DriverLoader;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    public final class TypicalWrongCase {
    
        public static void main(String[] args) {
            String sql = "SELECT * from STUDENT";
            dealResultSet(executeQuery(sql));
        }
    
        public static ResultSet executeQuery(String sql) {
            DriverLoader.loadSqliteDriver();
            try (Connection conn = Connector.getSqlConnection();
                 PreparedStatement pstmt = conn.prepareStatement(sql);
                 ResultSet rs = pstmt.executeQuery()) {
                return rs;
            } catch (SQLException e) {
                String msg = "Fail to execute QUERY using prepared statement.";
                throw new JdbcSampleException(ErrorCode.EXECUTE_QUERY_FAILURE, msg);
            }
        }
    
        private static void dealResultSet(ResultSet rs) {
            // do something with ResultSet
        }
    }
    
  • 相关阅读:
    iOS应用程序间共享数据(转)
    解决右滑返回手势和UIScrollView中的手势冲突(转)
    (转)iOS被开发者遗忘在角落的NSException-其实它很强大
    iOS 身份证最后一位是X,输入17位后自动补全X(转)
    springboot单机秒杀之queue队列
    springboot单机秒杀-aop+锁
    springbot单机秒杀,锁与事务之间的大坑
    spring-cloud学习之4.微服务请求打通
    spring-cloud学习之3.使用feign实现负载均衡
    spring-cloud学习之2.搭建请求网关spring-cloud-getway
  • 原文地址:https://www.cnblogs.com/jing-an-feng-shao/p/9227114.html
Copyright © 2011-2022 走看看