请教如何动态改变变量的数据类型? 多谢!!!

yangning 2002-09-19 04:15:19
现在我想写一个读取数据库中数据赋值到Bean中对应的属性变量中去,Bean中的属性名
与列名相同,但在取出列名和列的数据类型后,无法处理除String类型以外的其它类型(int,float等);即使String类型的也无法直接赋值给Bean中的变量。如:

......
while (rs.next()){
for (int i = 1; i <= numCols; i++){
String columnName;
columnName = rsmd.getColumnName(i); //取出列名
int colType = rsmd.getColumnType(i); //获得列的数据类型
switch (colType){
case 12: //如果是Varchar类型
columnName = rs.getString(columnName);
break;
case 2: //如果是int类型
columnName = rs.getInt(columnName);
break;
default:
}
}
......

问题:
1)columnName 中的值不能自动赋到Bean中对应的变量中
2)columnName = rs.getInt(columnName); 因为columnName 是String 而
rs.getInt(columnName)是int,所以会出错,这儿该如何处理?
3)Java 这类编译型语言可以处理这种情况吗?

多谢各位高手!!!
...全文
63 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangning 2002-09-20
  • 打赏
  • 举报
回复
advanced(超越):
你能否再详细地给我说明一下,如何从给定的 ResultSet 里按指定的 properties 读出数据填写到给定的 object 中,是指 obj = rs.getObject(i)吗?PropertyUtils.getPropertyType(obj, props[i]) 和setProperty(obj, props[i])这两个类你能否给我一份参考一下, 尤其是 setProperty(obj, props[i])该如何写?
望能再给指导!!!

方便的话发邮件给我,邮箱: 69808571@163.com.
万分感谢!!!
yangning 2002-09-20
  • 打赏
  • 举报
回复
非常感谢advanced(超越),我调试一下看看,按这个办法应该可以的。
回头好好谢你。
advanced 2002-09-19
  • 打赏
  • 举报
回复
参考下面的代码吧:
/**
* 从给定的 ResultSet 里按指定的 properties 读出数据填写到给定的 object 中。<br>
* 根据 obj 中 property 的数据类型决定读取数据时所使用的类型。<br>
* 现在支持的数据类型包括 int、long、boolean、float、double、String、sql.Timestamp、sql.Date、sql.Time、util.Date<br>
* NOTE: 要求 object 中 property 的名字与结果集中的字段名一致。<br>
* HINT: 结果集中的字段名是 case-insensitive 的,而 bean object 是 case-sensitive 的<br>
*/
protected void readObjectFromResultSet(ResultSet rs, Object obj, String[] props) throws SQLException {
for (int i=0; i<props.length; i++) {
Object value = null;
Class theClass = null;
try {
theClass = PropertyUtils.getPropertyType(obj, props[i]);

if (theClass.getName().equals("int")) {
value = new Integer(rs.getInt(props[i]));

} else if (theClass.getName().equals("long")) {
value = new Long(rs.getLong(props[i]));

} else if (theClass.getName().equals("boolean")) {
value = new Boolean(rs.getBoolean(props[i]));

} else if (theClass.getName().equals("float")) {
value = new Float(rs.getFloat(props[i]));

} else if (theClass.getName().equals("double")) {
value = new Double(rs.getDouble(props[i]));

} else if (Class.forName("java.lang.String").isAssignableFrom(theClass)) {
value = rs.getString(props[i]);

} else if (Class.forName("java.sql.Timestamp").isAssignableFrom(theClass)) {
value = rs.getTimestamp(props[i]);

} else if (Class.forName("java.sql.Date").isAssignableFrom(theClass)) {
value = rs.getDate(props[i]);

} else if (Class.forName("java.sql.Time").isAssignableFrom(theClass)) {
value = rs.getTime(props[i]);

} else if (Class.forName("java.util.Date").isAssignableFrom(theClass)) {
Timestamp t = rs.getTimestamp(props[i]);
if (t==null)
value = null;
else
value = new java.util.Date(t.getTime());

} else {
throw new Exception("un-supported class : " + theClass.getName());
}
} catch (Exception e) {
String msg = getClass().getName() + "::BaseDAO::readObjectFromResultSet - can not read property named [" + props[i] + "] - " + e.getMessage();
Debug.error(msg);
throw new SQLException(msg);
}

try {
if (value!=null) PropertyUtils.setProperty(obj, props[i], value);
} catch (Exception e) {
String msg = getClass().getName() + "::BaseDAO::readObjectFromResultSet - no property named [" + props[i] + "] in obj can be write";
Debug.error(msg);
throw new SQLException(msg);
}

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧