使用JDBC创建数据库对象(5)
· 构建更高级别的JDBC对象
从上面的例子可以明显看出,如果可以将我们使用过的一些方法封装在几个更高级别对象中,那将非常有帮助,我们不仅可以封装 y 程序块,而且可以更简单地访问 ResultSet 方法。
在这一部分中,我们将构建一个新的 resultSet 对象,该对象封装了JDBC ResultSet 对象,并以Sing数组的形式返回一行数据。我们发现您始终需要从 ResultSetMetaData 对象中获取列的序号和名称,因此,创建一个封装元数据的新对象就非常合理。
另外,我们经常需要按名称或整数索引提取某行的元素,如果不必总是将这些访问语句包括 y 块中,那将大有帮助。最后一点,如果我们需要整行的内容,则更方便的做法是将整行以Sing数组形式返回。在下面所示的 resultSet 对象中,我们致力于实现这些目标:
< cellspacing="0"> < bgcolor="#CCCCCC"> class resultSet
{
//
这个类是
JDBC ResultSet
对象的更高级抽象
ResultSet rs;
ResultSetMetaData rsmd;
int numCols;
public resultSet(ResultSet rset)
{
rs = rset;
y
{
//
同时获取元数据和列数
rsmd = rs.getMetaData();
numCols = rsmd.getColumnCount();
}
catch (Exception e)
{System.out.println("resultset error"
e.getMessage());}
}
//--
public Sing[] getMetaData()
{
//
返回包含所有列名或其他元数据的
//
一个数组
Sing md[] = new Sing[numCols];
y
{
for (int i=1; i<= numCols; i )
md[i-1] = rsmd.getColumnName(i);
}
catch (Exception e)
{System.out.println("meta data error"
e.getMessage());}
return md;
}
//--
public boolean hasMoreElements()
{
y{
return rs.next();
}
catch(Exception e){return false;}
}
//--
public Sing[] nextElement()
{
//
将行的内容复制到字符串数组中
Sing[] row = new Sing[numCols];
y
{
for (int i = 1; i <= numCols; i )
row[i-1] = rs.getSing(i);
}
catch (Exception e)
{System.out.println("next element error"
e.getMessage());}
return row;
}
//--
public Sing getColumnValue(Sing columnName)
{
Sing res = "";
y
{
res = rs.getSing(columnName);
}
catch (Exception e)
{System.out.println("Column value error:"
columnName e.getMessage());}
return res;
}
//--
public Sing getColumnValue(int i)
{
Sing res = "";
y
{
res = rs.getSing(i);
}
catch (Exception e)
{System.out.println("Column value error:"
columnName e.getMessage());}
return res;
}
//--
public void finalize()
{
y{rs.close();}
catch (Exception e)
{System.out.println(e.getMessage());}
}
} |