如何将PreparedStatement查询得到的结果集存储起来--方法一:采用对象数组

如何将PreparedStatement查询得到的结果集存储起来--方法一:采用对象数组

    在使用PreparedStatement执行查询Sql语句时,返回的结果集有时候只有一条(根据主键查询),有时候有多条(根据非主键查询)。查询的结果可以采用ResultSet进行接收,然后采用next()方法直接输出其中的数据即可实现。

    下面就是这种情况:没有将ResultSet中的数据存储起来,而是直接输出

     

<span style="font-size:18px;">package jdbcPrograms;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import commonDBConnection.ConnectToDataBase;

public class ResultSetGetContentsToList {
/*
 * 将查询的结果集存放进预先做好的对象中--这次是存放进     对象      数组中
 */
	public static void main(String[] args) {</span>
<span style="font-size:18px;"><span>		</span>//这里注意:调用了这篇我的另一篇博客<a target=_blank href="http://blog.csdn.net/u013871100/article/details/48895307" target="_blank">JDBC链接MySql</a>
		Connection  conn=ConnectToDataBase.getDataBaseConnection();
		
		String sqlQuery="SELECT id,deptName,deptDesc from tb_department WHERE deptDesc=?";
		PreparedStatement ppst=null;
		
		String strQuery="销售支持";
		
		try {
			ppst=conn.prepareStatement(sqlQuery);
			ppst.setString(1, strQuery);
		} catch (SQLException e) {
			System.out.println("创建数据库预编译语句发生异常: "+e.getMessage());
		}
	
		ResultSet rs=null;
		
		try {
			rs=ppst.executeQuery();
		} catch (SQLException e) {
			System.out.println("查询数据库语句发生异常: "+e.getMessage());
		}
			

		//获取返回的ResultSet内容
		try {

			while (rs.next()) {
				System.out.println(rs.getInt(1)+"--"+rs.getString(2)+"--"+rs.getString(3)+"--");

			}
						
		} catch (SQLException e) {
			System.out.println("获取返回的结果集发生异常: "+e.getMessage());
		}finally{
			try {
				ppst.close();
			} catch (SQLException e) {
				System.out.println("关闭预编译语句发生异常: "+e.getMessage());
			}
			try {
				conn.close();
			} catch (SQLException e) {
				System.out.println("关闭数据库链接语句发生异常: "+e.getMessage());
			}
		}
		
	}
}

</span>
    如果现在需要将ResultSet中的结果集存储起来以备后续使用,则得需要想办法,下面是办法一,下一篇是办法二

方法一采用的“反射”的味道:即根据查询的数据库表(这里是tb_department表)中的字段,新建一个类(这里是Department类),类中的相应的属性跟数据库的“一一映射”。

    下面是数据库表tb_department:


    对应的,设置一个类Department:

package jdbcPrograms;

public class Department {
	private Integer id;
	private String deptName;
	private String deptDesc;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getDeptName() {
		return deptName;
	}
	public void setDeptName(String deptName) {
		this.deptName = deptName;
	}
	public String getDeptDesc() {
		return deptDesc;
	}
	public void setDeptDesc(String deptDesc) {
		this.deptDesc = deptDesc;
	}
	
}

    之后就可以了,下面是存储ResultSet结果集中的结果的代码

package jdbcPrograms;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import commonDBConnection.ConnectToDataBase;

public class ResultSetGetContentsToList {
/*
 * 将查询的结果集存放进预先做好的对象中--这次是存放进     对象      数组中
 */
	public static void main(String[] args) {
		Connection  conn=ConnectToDataBase.getDataBaseConnection();
		
		String sqlQuery="SELECT id,deptName,deptDesc from tb_department WHERE deptDesc=?";
		PreparedStatement ppst=null;
		
		String strQuery="销售支持";
		
		try {
			ppst=conn.prepareStatement(sqlQuery);
			ppst.setString(1, strQuery);
		} catch (SQLException e) {
			System.out.println("创建数据库预编译语句发生异常: "+e.getMessage());
		}
	
		ResultSet rs=null;
		
		try {
			rs=ppst.executeQuery();
		} catch (SQLException e) {
			System.out.println("查询数据库语句发生异常: "+e.getMessage());
		}
		
		
		int rRows=0;
		//rs.beforeFirst();
		try {
			rs.last();
			rRows=rs.getRow();
			//System.out.println("行数: "+rRows);
		} catch (SQLException e1) {
			System.out.println("获取结果集的行数发生异常: "+e1.getMessage());
		}

		Department[] dept=new Department[rRows];
		
		try {
			//rs相当于一个指针一样---指向了返回的结果集的第一行之前,而在之前已经遍历过到最后了,所以现在需要返回到原先的位置
			rs.beforeFirst();
		} catch (SQLException e1) {
			System.out.println("rs回溯指针发生异常: "+e1.getMessage());
		}
		
		//获取返回的ResultSet内容
		try {
			int i=0;
			while (rs.next()) {
				//System.out.println(rs.getInt(1)+"--"+rs.getString(2)+"--"+rs.getString(3)+"--");
				
				dept[i]=new Department();
				
				dept[i].setId(rs.getInt(1));
				dept[i].setDeptName(rs.getString(2));
				dept[i].setDeptDesc(rs.getString(3));
		
				i += 1;
			}
			
			
			
		} catch (SQLException e) {
			System.out.println("获取返回的结果集发生异常: "+e.getMessage());
		}finally{
			try {
				ppst.close();
			} catch (SQLException e) {
				System.out.println("关闭预编译语句发生异常: "+e.getMessage());
			}
			try {
				conn.close();
			} catch (SQLException e) {
				System.out.println("关闭数据库链接语句发生异常: "+e.getMessage());
			}
		}
		
		//终于可以将获取的ResultSet结果集存起来了---这次是以对象集合“反射”意味在里面
		//System.out.println(dept.length);
		for (Department department : dept) {
			System.out.println(department.getId()+"--"+department.getDeptName()+"--"+department.getDeptDesc());
		}
		
	}
}

    下一篇介绍采用列表List存储ResultSet返回的结果集


































































































评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

修罗debug

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值