分析以下代码并给出正确的代码public class MetaDataQueryDemo public static void mainString args throws Exception String sql = select ename 姓名saljob from emp where job = or job = ; querymanagerSALE
代码存在以下问题:
query方法中的sql参数没有被使用,而是在main方法中直接调用query方法时传入了具体的参数。- 在处理结果集时,
for循环的条件应为i <= resultSetMetaData.getColumnCount(),而不是i < resultSetMetaData.getColumnCount(),否则最后一列的数据无法输出。 - 在每次输出结果后,应该调用
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();
}
}
``
原文地址: http://www.cveoy.top/t/topic/iFkd 著作权归作者所有。请勿转载和采集!