Object数据类型转换成自定义类型数据

新星_star 2011-07-12 09:10:33
小弟的代码如下
Dao层:

public Object findById(String IDColoum,int IDValue,String TableName) {

Object object = new Object();
QueryRunner qr = new QueryRunner();
Connection conn = DbConnection.getConnection();

String sql = "select * from "+TableName+" where "+IDColoum+" = "+IDValue;
try {
object = qr.query(conn,sql,new BeanHandler<Object>(Object.class));
} catch (SQLException e) {
e.printStackTrace();
} finally {
DbConnection.closeConnection();
}
return object;
}

调用Dao方法

public void TestFindByIDDemo(){
String IDColoum = "Cty_ID";
int IDValue = 118;
String TableName = "QS_Ctype";

textDao text = new textDao();
Object c = new QsCtype();
c = text.findById(IDColoum, IDValue, TableName);
//System.out.println(text.toString());
System.out.println( ((QsCtype) c).getCty_ID());
}

我想先取得一个Object类型的数据,取得的数据的结构是跟我自定义类型的结构是一样的,然后再转化成我自定义的类型。
不知道这样可行不可行。我自己在试的时候提示不能转换。
各位有什么好的办法没有?
...全文
649 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
奋斗的小鸟V 2011-07-12
  • 打赏
  • 举报
回复
学习一下
飞跃颠峰 2011-07-12
  • 打赏
  • 举报
回复
如果你放进object的是你自定义的类型实例,在调用的时候临时转换是可以的
如果是new Ojbect()这样的,永远也转不成
新星_star 2011-07-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 alexandertech 的回复:]

你的findById()写法本来就隐患重重

object = qr.query(conn,sql,new BeanHandler<Object>(Object.class));这是在try{}里执行的,如果没成功呢?方法仍然会返回一个object,该object是通过方法中的第一句:
Object object = new Object();
来生成的,这个object显然跟QsCty……
[/Quote]

谢谢。
我是这么想的。我每次调用的时候都会传表名进去,这样就是从这个表里面获取的数据,我的自定义类型就是一个实体,是根据表的字段编写的。那么就和我需要的数据类型不是一样的么。只不过一开始的时候放在object里面,我调用的时候类型转换一下,这样不知道行不行。
飞跃颠峰 2011-07-12
  • 打赏
  • 举报
回复
你的findById()写法本来就隐患重重

object = qr.query(conn,sql,new BeanHandler<Object>(Object.class));这是在try{}里执行的,如果没成功呢?方法仍然会返回一个object,该object是通过方法中的第一句:
Object object = new Object();
来生成的,这个object显然跟QsCtype八杆子打不着。

就算qr.query()是返回QsCtype对象,findById()仍有可能返回的是一个非QsCtype对象,这样你在外围强转是可能会失败的。
新星_star 2011-07-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wang12 的回复:]

findById的方法签名返回的是Object类型,findById方法内部在返回时已经丢失了QsCtype的类型信息。
所以,下面的调用
Object c = new QsCtype();
c = text.findById(IDColoum, IDValue, TableName);
c这个时候只是一个对于Object对象的引用。
要解决这个问题,需要你在
object = q……
[/Quote]
谢谢哦。不过如果这样子做的话,就失去了我开始这么写的意义。我是想首先获取Object类型的数据,然后在调用的时候转换成我需要的类型。
这样的话,就可以不用写那么多的Dao了。因为我发现那么多的DAO,很多都是返回的类型不同而已。其他几乎一样。所以就试着能不能写出一个通用的Dao.
wang12 2011-07-12
  • 打赏
  • 举报
回复
findById的方法签名返回的是Object类型,findById方法内部在返回时已经丢失了QsCtype的类型信息。
所以,下面的调用
Object c = new QsCtype();
c = text.findById(IDColoum, IDValue, TableName);
c这个时候只是一个对于Object对象的引用。
要解决这个问题,需要你在
object = qr.query(conn,sql,new BeanHandler<Object>(Object.class));
查询返回时做一次强制类型转换,像这样
object = (QsCtype)qr.query(conn,sql,new BeanHandler<Object>(Object.class));

新星_star 2011-07-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zhuchao_ko 的回复:]

Object c = new QsCtype();
c = text.findById(IDColoum, IDValue, TableName);



QsCtype c = (QsCtype)text.findById(IDColoum, IDValue, TableName);
[/Quote]
谢谢,试验了一下,还是说Object不能转化成QsCtype类型。
宁波朱超 2011-07-12
  • 打赏
  • 举报
回复
Object c = new QsCtype();
c = text.findById(IDColoum, IDValue, TableName);



QsCtype c = (QsCtype)text.findById(IDColoum, IDValue, TableName);

81,092

社区成员

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

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