java反射问题,求指教

人工智能-张晨光 人工智能-张晨光 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
数据表:
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");
}
}
}



报错是类型不匹配,请高手指教是哪方面的问题???实体类省略了
...全文

相关推荐

评论 2
收藏 已收藏
分享
返回顶部
人工智能-张晨光
人工智能-张晨光 优质创作者: 前端开发技术领域 优质创作者: 前端开发技术领域领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
Java EE 67,535 成员 225,843 内容