第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

java反射獲取類屬性問題。

java反射獲取類屬性問題。

翻翻過去那場雪 2019-02-21 03:04:32
代碼: public static List<Object> select(String sql, String o) throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException { Class c = Class.forName(o); Field[] fls = c.getDeclaredFields(); List<String> list= new ArrayList<>(); for (int i = 0; i < fls.length; i++) { System.out.println("公有屬性之" + fls[i].getName()); list.add(fls[i].getName()); } Object object = c.newInstance(); List<Object> l = new ArrayList<>(); stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql); while (rs.next()) { // Retrieve by column name String id = rs.getString("href"); String name = rs.getString("title"); // Display values System.out.print("ID: " + id); System.out.print(", name: " + name); } rs.close(); stmt.close(); conn.close(); return l; } 我想獲取傳進(jìn)來的類的所有屬性,然后通過re.getString獲得值,但是我不知道屬性有多少個,在rs.next里for循環(huán)遍歷的話就會失去rs的作用域。麻煩哪位大神幫我看看怎么寫 = =。
查看完整描述

3 回答

?
縹緲止盈

TA貢獻(xiàn)2041條經(jīng)驗(yàn) 獲得超4個贊

不太會排版,湊合看。

while(rs.next()){
    //cls: Class<T> cls
    T t=cls.newInstance();
    //rsmd: ResultSetMetaData rsmd
    for(int i=0;i<rsmd.getColumnCount();i++){
        errorIndex=i+1;
        String columnName=(rsmd.getColumnName(i+1)).toLowerCase();
        //rs: ResultSet rs
        Object obj=rs.getObject(columnName);
        if(null==obj) continue;
        columnName=String.valueOf(columnName.charAt(0)).toUpperCase()+columnName.substring(1);
        Method m;
        m=cls.getMethod("set"+columnName, obj.getClass());
        m.invoke(t, obj);
    }
    dataList.add(t);
}
查看完整回答
反對 回復(fù) 2019-03-01
?
RISEBY

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超5個贊

你的反射其實(shí)存在點(diǎn)問題:
即使要獲取class對象,最好不要通過Class.formName,除非你確實(shí)是需要動態(tài)加載外部類。

不知道這樣寫是否符合你的要求

public static List<Map<String,Object>> select(Object o)
             throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException {
         Field[] fds=o.getClass().getDeclaredFields();
            String[] names=new String[fds.length];
            for(int i=0;i<fds.length;i++){
                names[i]=fds[i].getName();
                System.out.println(names[i]);
            }
        List<Map<String,Object>> list=new ArrayList<>();
         stmt = conn.createStatement();
         ResultSet rs = stmt.executeQuery(sql);
         while (rs.next()) {
             Map<String,Object> m=new HashMap<>();
             for(String name:names){
                 String tmp = rs.getString(name);
                 m.put(name, tmp);
             }
             list.add(m);  
         }
     rs.close();
     stmt.close();
     conn.close();
     return list;
查看完整回答
反對 回復(fù) 2019-03-01
?
慕標(biāo)琳琳

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超9個贊

org.springframework.jdbc.core.BeanPropertyRowMapper 現(xiàn)成的實(shí)現(xiàn),你可以參考,并且模仿一下。

查看完整回答
反對 回復(fù) 2019-03-01
  • 3 回答
  • 0 關(guān)注
  • 466 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號