JDBC中的元数据——3.结果集元数据

package metadata;

import java.sql.Connection;
import java.sql.ParameterMetaData;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.List;

import javax.sql.DataSource;

import com.mchange.v2.c3p0.ComboPooledDataSource;

import entity.Student;
import util.SQLUtil;

/**
 * 结果集元数据:
 * @author mzy
 *
 */
public class Demo03 {
	private static DataSource ds = new ComboPooledDataSource();
	public static void main(String[] args) throws Exception {
		// easyUse();
		
		// 补充完SQLUtil中的Query方法
		List<Student> list = SQLUtil.query("select * from student", null, Student.class);
		for(Student student : list) {
			System.out.println(student);
		}
	}

	private static void easyUse() throws Exception {
		Connection conn = ds.getConnection();
		
		String sql = "select * from student";
		PreparedStatement stmt = conn.prepareStatement(sql);
		/*
		 *  获取参数元数据:
		 *  	目的是取得我们需要赋值的参数数量;
		 *  	例如如如果我们的查询中有where条件!
		 */
		ParameterMetaData param = stmt.getParameterMetaData();
		int count = param.getParameterCount();
		
		Object[] values = null;
		System.out.println(count);
		/* // 因为恒无法进入,所以注释掉
		if(values != null) { // 当传入的values为空,说明不需要参数
			// 有需要赋值的参数的时才进行if中的操作
			for(int i=0; i<count; i++) {
				stmt.setObject(i+1, values[i]);
			}
		}
		*/
		ResultSet rs = stmt.executeQuery();
		/*
		while(rs.next()) { 
			// 原来的办法,手动的取出每一行中的数据
			int id = rs.getInt(1);
			String name = rs.getString(2);
			System.out.println(id+"\t"+name);
		}
		*/
		// 这里的while中从结果集中取得元素的时候
		// 程序并不知道没一行有几个元素
		// 所以这里需要结果集元数据,就可以知道一共有几列了
		ResultSetMetaData metaData = rs.getMetaData();
		int col = metaData.getColumnCount();
		while(rs.next()) {
			// 遍历每列
			for(int i=1; i<=col; i++) {
				Object value = rs.getObject(i);
				System.out.print(value+"\t");
			}
			System.out.println();
		}
		
		conn.close();
	}
}

其中部分已经封装到了 SQLUtil中,请点击

猜你喜欢

转载自blog.csdn.net/qq_36791569/article/details/80271742
今日推荐