如何将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返回的结果集