java反射问题,求指教

teayear
前端领域优质创作者
博客专家认证
2016-10-22 09:41:48
数据表:
Create database News
go
use News
go
Create table UserInfo
(
Id int identity(1,1)primary key,
username varchar(20),
pwd varchar(20),
createTime date
)

package nan;

import java.util.ArrayList;
import java.util.List;
import java.lang.reflect.*;
import java.sql.*;
//flashFXP访问;Server-u:建ftp服务器的

public class MetaDataTest<T> {
public List<T>generalSearch(String sql,Object[]args,String className){
//存储返回的集合对象
List<T>list=new ArrayList<T>();

Connection con=DaoFactory.getConnection();
PreparedStatement pstmt=null;
ResultSet rs=null;

//使用反射获取类的信息;
try {
Class<T>clazz=(Class<T>)Class.forName(className);
Field[]fields=clazz.getDeclaredFields();
Method method=null;

pstmt=con.prepareStatement(sql);
rs=pstmt.executeQuery();
ResultSetMetaData resmd=null;
resmd=rs.getMetaData();
int columncount=resmd.getColumnCount();

while(rs.next()){
T obj=clazz.newInstance();//实例化
for(int i=1;i<=columncount;i++){
String cname=resmd.getColumnName(i);
int ctype=resmd.getColumnType(i);
for(Field f:fields){
if(cname.equals(f.getName())){
//封装数据
String firstLetter=f.getName().substring(0,1).toUpperCase();
String methodName="set"+firstLetter+f.getName().substring(1);
//如果列是整型的
if(ctype==Types.INTEGER){
//System.out.println(methodName);
//System.out.println(rs.getInt(i));
//method=clazz.getMethod(methodName, Integer.class);
//method.invoke(obj, rs.getInt(i));
}
//else if(ctype==Types.VARCHAR){
// method=clazz.getMethod(methodName, String.class);
// method.invoke(obj, rs.getString(i));
// }else if(ctype==Types.TIMESTAMP){
// method=clazz.getMethod(methodName, Date.class);
// method.invoke(obj, rs.getDate(i));
// }else if(ctype==Types.NUMERIC){
// method=clazz.getMethod(methodName,Double.class);
// method.invoke(obj, rs.getDouble(i));
// }
}
}
list.add(obj);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
}


package nan;

import java.util.List;


public class TestMD {
public static void main(String[] args) {

String sql="select * from userinfo";
MetaDataTest mdt=new MetaDataTest<UserInfo>();
List<UserInfo>list=mdt.generalSearch(sql, null,UserInfo.class.getName());
System.out.println("ID\t姓名\t密码");
for(UserInfo user:list){
System.out.println(user.getId()+"\t"+
user.getUsername()+"\t"+
user.getPwd()+"\t");
}
}
}



报错是类型不匹配,请高手指教是哪方面的问题???实体类省略了
...全文
284 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
大山-小浩子 2016-10-22
  • 打赏
  • 举报
回复
这个问题不会

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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