代码存在以下问题:

  1. query方法中的sql参数没有被使用,而是在main方法中直接调用query方法时传入了具体的参数。
  2. 在处理结果集时,for循环的条件应为i <= resultSetMetaData.getColumnCount(),而不是i < resultSetMetaData.getColumnCount(),否则最后一列的数据无法输出。
  3. 在每次输出结果后,应该调用resultSet.next()方法将结果集指针移到下一行,否则会陷入无限循环。

以下是修正后的代码:

public class MetaDataQueryDemo {

    public static void main(String[] args) throws Exception {

        String sql = "select ename 姓名,sal,job from emp where job = ? or job = ?";

        query(sql, "manager", "SALESMAN");

    }

    public static void query(String sql, Object... params) throws Exception {
        //加载数据库驱动
        Connection conn = DBUtil.getConnection();
        //获取链接
        PreparedStatement ps = conn.prepareStatement(sql);
        ParameterMetaData parameterMetaData = ps.getParameterMetaData();

        //设置占位符
        if (params != null && params.length > 0) {
            for (int i = 0; i < parameterMetaData.getParameterCount(); i++) {
                ps.setObject(i+1,params[i]);
            }
        }

        //执行sql语句返回结果集
        ResultSet resultSet = ps.executeQuery();

        //获取结果集元数据
        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();

        //处理结果集
        while (resultSet.next()){
            for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
                /*
                    根据列名返回对应列名的数据
                    getColumnLabel(int column)
                    根据sql的查询别名来返回数据,如果没有别名则使用列表
                 */
                System.out.print(resultSet.getObject(resultSetMetaData.getColumnLabel(i))+"\t");
            }
            System.out.println();
        }
        System.out.println();
    }
}
``
分析以下代码并给出正确的代码public class MetaDataQueryDemo public static void mainString args throws Exception String sql = select ename 姓名saljob from emp where job = or job = ; querymanagerSALE

原文地址: http://www.cveoy.top/t/topic/iFkd 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录