结果。对ResultSet对象的处理必须逐行地进行,而对每一行中的各个列,可以按任何顺序进行处理。
ResultSet对象文持一个指向当前行的指针。最初,这个指针指向第一行之前,ResultSet类的NEXT()方法使这个指针移向下一行,此时可以对第一行的数据进行处理。处理完毕后,再使用NEXT()方法将指针下移一行,继续处理下一行数据。NEXT()方法的返回值是一个BOOLEAN值,若为TRUE,则说明指针成功下移,可以对该行数据进行处理。若返回FALSE,则说明没有下一行,即结果集已处理完毕。
对每一行处理时,可以对各个列按任意顺序进行。ResultSet类的getXXX方法可以从某一列中获得结果。其中XXX是JDBC中的JAVA的数据类型。JAVA数据类型与SQL数据类型之间可以进行转换。
由于要将结果发送至客户端,所以要创建一个HASHTABLE数组,将ResultSet类的对象的数据存放在其中。
//取结果集的信息
ResultSetMetaData rsmd = crs.getMetaData();
//首先,将结果集的各个列名放在HASHTABLE中,取列名,向HASHTABLE表中放入结果集中的数据。在WHILE循环中调用ResultSet对象的NEXT()方法,扫过结果中的每一条记录。对于每一条记录,再用一个FOR 循环来遍历每一列。对第一个记录还需要创建适当的HASHTABLE对象以存放每一列数据,在循环中,检查记录数,并在处理第一条记录时,在数组的适当位置创建一个HASHTABLE对象。创建后,即可将数据添加到HASHTABLE表中。
int numCols=rsmd.getColumnCount();
String Colsname=null;
Hashtable Record[]; / /创建HASHTABLE对象
Record = new Hashtable[numCols];
for (int k=0;k<numCols;k++){
Record[k] = new Hashtable();
Record[k].put(newInteger(1),rsmd.getColumnLabel(k+1));
} //放入列名完毕
int i;
boolean have = false;
int j=0;
//开始放入数据
while (crs.next()){
have = true;
j++;
index++;
for (i=0; i<numCols;i++){
String r = crs.getString(i+1);
if (r==null){
Record[i].put(new Integer(index),"NULL");
}else{
Record[i].put(new Integer(index),r);
}
}
}
5.创建输出流,用于发送HASHTABLE对象,利用OutputStream 和ObjectOutputStream对象将HASHTABLE对象传送给客户
OutputStream ostream = client.getOutputStream();
ObjectOutputStream out = new ObjectOutputStream(ostream);
out.writeBoolean(have);
if (have){
out.writeInt(numCols);
out.writeInt(j);
//向输出流中写入HASHTABLE对象,使其序列化
out.writeObject(Record);
}
//发送HASHTABLE表对象
out.flush();
out.close(); / /输出流关闭
}catch(Exception e){ / /例外处理
System.out.println("error:"+e);
}
}
<< 上一页 [11] [12] [13] [14] [15] [16] [17] [18] [19] 下一页