java反射问题,求指教
数据表:
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
)
报错是类型不匹配,请高手指教是哪方面的问题???实体类省略了
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");
}
}
}
报错是类型不匹配,请高手指教是哪方面的问题???实体类省略了
...全文
相关推荐
Java 反射创建get set方法及反射方法的调用
本文将详细介绍如何利用Java反射来创建get和set方法,并演示如何通过反射机制调用这些方法。#### Java反射概述Java反射机制提供了一种方式,可以在运行时获取类的信息,并创建和操作对象。
详解Java 反射和反射的应用场景
- 反射操作也可能破坏封装性,可能导致安全问题和意外行为,所以需谨慎使用。总的来说,Java反射机制是Java语言中的一个重要工具,它允许程序在运行时具有更高的灵活性和可扩展性。
Java反射案例
**安全性问题**: 反射能够绕过Java的安全机制,访问私有成员或执行敏感操作,这也意味着不恰当的反射使用可能会导致安全漏洞。
java中反射的概念
然而,反射虽然强大,但也存在性能问题。因为它涉及到运行时的类加载和元数据的查询,所以比直接编译时静态链接的代码运行效率要低。此外,反射可能会破坏封装性,过度使用可能导致安全风险和难以维护的代码。
java反射原理
然而,正如任何强大工具一样,反射机制的使用也需遵循一定的原则,避免滥用导致的潜在问题。


