类型不匹配错误。利用Java反射技术将查询结果封装为对象

问题描述

packagecom.jdbc;importjava.lang.reflect.InvocationTargetException;importjava.lang.reflect.Method;importjava.sql.Connection;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.ResultSetMetaData;importjava.sql.SQLException;publicclassORMTest{publicstaticvoidmain(String[]args)throwsSQLException,InstantiationException,IllegalAccessException,IllegalArgumentException,InvocationTargetException{//TODOAuto-generatedmethodstubUsersuser=(Users)getObject("selectidasId,nameasName,passwordasPasswordfromuserwhereid=5",Users.class);System.out.println(user);}staticObjectgetObject(Stringsql,Classclazz)throwsSQLException,InstantiationException,IllegalAccessException,IllegalArgumentException,InvocationTargetException{Connectionconn=null;PreparedStatementps=null;ResultSetrs=null;try{conn=JdbcUtils.getConnection();ps=conn.prepareStatement(sql);rs=ps.executeQuery();ResultSetMetaDatarsmd=rs.getMetaData();intcount=rsmd.getColumnCount();String[]colNames=newString[count];for(inti=1;i<=count;i++){colNames[i-1]=rsmd.getColumnLabel(i);//ps.setObject(i,cloNames);}Objectobject=null;if(rs.next()){System.out.println(rs.getInt("id"));System.out.println(rs.getString("name"));object=clazz.newInstance();for(inti=0;i<colNames.length;i++){StringcolName=colNames[i];StringmethodName="set"+colName;Method[]ms=clazz.getMethods();//Method[]ms=user.getClass().getMethods();for(Methodm:ms){if(methodName.equals(m.getName())){//System.out.println(rs.getObject(colName));//System.out.println(user);m.invoke(object,rs.getObject(colName));break;}}//datas.put(cloNames[i],rs.getObject(cloNames[i]));}}returnobject;}finally{JdbcUtils.free(rs,ps,conn);}}}如上代码,错误提示类型不匹配Exceptioninthread"main"java.lang.IllegalArgumentException:argumenttypemismatchatsun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)atsun.reflect.NativeMethodAccessorImpl.invoke(UnknownSource)atsun.reflect.DelegatingMethodAccessorImpl.invoke(UnknownSource)atjava.lang.reflect.Method.invoke(UnknownSource)atcom.jdbc.ORMTest.getObject(ORMTest.java:68)atcom.jdbc.ORMTest.main(ORMTest.java:29)

解决方案

解决方案二:
m.invoke(object,rs.getObject(colName));补充一下,这一行提示错误
解决方案三:
User类里的set方法参数类型和rs.getObject(colName)不匹配吧
解决方案四:
oracle中的number中不是映射出integer而是BigDecimal

时间: 2024-09-17 19:45:03

类型不匹配错误。利用Java反射技术将查询结果封装为对象的相关文章

Android系统原理与源码分析(1):利用Java反射技术阻止通过按钮关闭对话框

本文为原创,如需转载,请注明作者和出处,谢谢!     众所周知,AlertDialog类用于显示对话框.关于AlertDialog的基本用法在这里就不详细介绍了,网上有很多,读者可以自己搜索.那么本文要介绍的是如何随心所欲地控制AlertDialog.     现在我们来看看第一个需求:如果某个应用需要弹出一个对话框.当单击"确定"按钮时完成某些工作,如果这些工作失败,对话框不能关闭.而当成功完成工作后,则关闭对话框.当然,无论何程度情况,单击"取消"按钮都会关闭

java 利用java反射机制动态加载类的简单实现_java

如下所示: ////////////////// Load.java package org.bromon.reflect; import java.util.ArrayList; import java.util.List; public class Load implements Operator { @Override public List<?> act(List<?> params) { // TODO Auto-generated method stub List<

利用java反射机制实现自动调用类的简单方法_java

1. 新建TestServlet类 package com.yanek.test; import java.io.IOException; import java.lang.reflect.Method; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.ht

利用java反射机制调用类的私有方法(推荐)_java

试想一下,如果你可以轻易地调用一个类的私有方法,那么是不是说你的封装都失效了?最近在看java的反射机制,发现居然可以利用java的反射机制去调用其他类的私有方法,至于这能干什么,那就见人见智了.. 我写的一段简易实例代码如下: import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; /** * @author thomaslwq * @version 创建时间:Sep 4, 201

Android中Java反射技术的使用示例

MainActivity如下: package cn.testreflect; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; import android.os.Bundle; import android.app.Activity; /** * Demo描述: * Android中Java反射技术的使用示例 * 在Java中描述字节码文

Java反射机制既然可以拿到class对象,知道其中方法为啥不直接使用对象调用方法?

问题描述 Java反射机制既然可以拿到class对象,知道其中方法为啥不直接使用对象调用方法? Java反射机制既然可以拿到class对象,知道其中方法为啥不直接使用对象调用方法?而要invoke来调用对象的方法? 解决方案 知道方法的话当然可以不用invoke.需要invoke的方法大多是在写代码的时候无法确定的 解决方案二: 问题出现的场景是什么? 解决方案三: 面向接口,有些包是不同厂商实现的 反射能通过编译,在运行时才报错 解决方案四: 没有你想的那么简单,你多看看java的设计模式,和

java反射技术(一)

java的反射技术功能十分强大,整理一些资料!! (如需转载,请注明出处!) Lesson: 检测类examing class 1.Retrieving Class Objects 获取一个Class对象(metadata) a,从对象的实例获取.Class c = mystery.getClass();//(return Class)b,从子类的实例获取TextField t = new TextField(); Class c = t.getClass(); Class s = c.getS

利用Java反射(Reflection) 机制提高代码的行覆盖率

在本文中,您将看到如何通过使用反射机制,在外部直接对目标类中的不可访问成员进行测试,以提高被测代码数量:以及通过修改 Cobertura 源码,使其支持通过正则表达式来过滤不需要进行单元测试的代码,以降低代码总数.代码覆盖率的提高,减少了单元测试过程中未被覆盖的代码数量,降低了http://www.aliyun.com/zixun/aggregation/7155.html">开发人员编写或修改单元测试用例的时间成本,从而提高了整个单元测试的效率. 单元测试是软件开发过程中重要的质量保证环

蓝牙 读取ServiceRecord时,出现类型不匹配错误

问题描述 问题如题,具体代码如下://首先定义一个Vector类型的records来存服务记录Vector records = new Vector();...........................//获得服务 public void servicesDiscovered(int transID, ServiceRecord[] servRecord) { for (int i = 0; i < servRecord.length; i++) { records.addElement(