jdbc利用java反射實現結果集得到處理:bug:argument type mismatch
阿新 • • 發佈:2021-12-01
jdbc利用java反射處理結果集時:bug:argument type mismatc
■ 背景:利用反射處理結果集過程如下[利用了javaBeans]:
public class BeanHandler<T> implements IResultHandler<T> { private Class<T> classType; //因為需要把結果集的一行封裝成一個物件【❀ 則需要有物件的存在】,通過反射技術,動態編譯是才傳入具體型別的物件 public BeanHandler(Class<T> classType) { //通過構造器,傳入具體的型別的,以便後邊通過反射獲取到對應型別的具體物件 this.classType = classType; } @Override public T handle(ResultSet rs) throws Exception { //1、建立對應的類的一個物件 T obj = classType.newInstance(); //2、取出結果集中當前游標所在行的某一列的資料 BeanInfo beanInfo = Introspector.getBeanInfo(classType, Object.class); PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors(); if(rs.next()) { for(PropertyDescriptor pd : pds) { //獲取物件的屬性名【屬性名和列名相同】 String columnName = pd.getName(); System.out.println(columnName); Object val= rs.getObject(columnName); //3、呼叫該物件的setter方法,把某一列的資料設定進去 pd.getWriteMethod().invoke(obj, val); } } return obj; } }
1,導致bug的原因:引數型別不匹配:則是domain 實體類的屬性的型別於資料庫的欄位的型別不匹配
■ 一開始,我的java中User的型別是:
package com.shan.domain;
import lombok.Data;
@Data
public class User {
private int id;
private String username;
private String password;
}
■ 一開始,我的資料庫中t_user表的型別是:
---------------------其中的id在實體類User 和資料庫表t_user 不統一。
2,解決:統一一下java實體類與資料庫表中的屬性型別即可。
例如,將User 類中的id 型別修改為 Long 型別