0

私は最近、「名前による」と「ラベルによる」という2つの方法で列を作成することができますが、「ラベルによる」方法はデフォルトであることがわかりました。BeanutilsのResultSetDynaSetのバグ?

実際、カラム名の概念はわかりにくいようです。私のためだけでなく、Beanutilsのautorsにとっても、デフォルトでは名前でフィールドにアクセスするため(列エイリアスを持つクエリにアクセスできなくなるため)同時にthey have property useColumnLabelがあり、これはイントロスペクション後に設定されるため効果がありません。ここで

は、サンプルコード

import org.apache.commons.beanutils.*; 

import java.lang.reflect.InvocationTargetException; 
import java.sql.*; 
import java.util.ArrayList; 
import java.util.Iterator; 

public class ResultSetIteratorAttempt { 


    public static void main(String[] args) throws ClassNotFoundException, SQLException, InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException { 

     Connection conn = null; 
     Statement stmt = null; 

     Class.forName("com.mysql.jdbc.Driver"); 

     conn = DriverManager.getConnection("jdbc:mysql://localhost/sample","java",""); 

     stmt = conn.createStatement(); 

     ResultSet rs = stmt.executeQuery("SELECT Id as NM1, Name as NM2 FROM DayOfWeek;"); 

     ArrayList results = new ArrayList(); // To hold copied list 

     ResultSetDynaClass rsdc = new ResultSetDynaClass(rs); 
     rsdc.setUseColumnLabel(true); 

     DynaProperty[] properties = rsdc.getDynaProperties(); 
     String propertyName = ""; 
     for(int i=0; i<properties.length; ++i) { 
     propertyName = properties[i].getName(); 
     System.out.println(String.format("Property #%d is %s", i, propertyName)); 
     } 

     Iterator rows = rsdc.iterator(); 
     DynaBean row; 
     while (rows.hasNext()) { 
     row = (DynaBean) rows.next(); 
     System.out.println(String.format("Row is %s", row.get(propertyName))); 
     } 

    } 

} 

アムI右ですか?

UDPATE

mysql> select * from dayofweek; 
+----+-----------+ 
| Id | Name  | 
+----+-----------+ 
| 5 | Friday | 
| 1 | Monday | 
| 6 | Saturday | 
| 7 | Sunday | 
| 4 | Thursday | 
| 2 | Tuesday | 
| 3 | Wednesday | 
+----+-----------+ 
7 rows in set (0.00 sec) 

答えて

関連する問題