1. 程式人生 > 其它 >jdbc利用java反射實現結果集得到處理:bug:argument type mismatch

jdbc利用java反射實現結果集得到處理:bug:argument type mismatch

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 型別