0

Недавно я обнаружил, что JDBC имеет два способа назвать столбец, то есть «по имени» и «по метке», хотя по-видимому «по методу» используется по умолчанию.Ошибка в результатах BeanutilsSetDynaSet?

На самом деле, название столбца, похоже, запутывает для меня. И, вероятно, не только для меня, но и для авторов Beanutils, потому что они по умолчанию обращаются к полям по имени (что приводит к невозможности получить доступ к любому запросу с псевдонимами столбцов). Одновременно 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))); 
     } 

    } 

} 

я прав?

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) 

ответ