0

最近、JDBC には列に名前を付ける方法が 2 つあります。つまり、「名前別」と「ラベル別」ですが、明らかに「ラベル別」の方法がデフォルトです。

実際、列名の概念は私にとって混乱しているようです。そして、おそらく私だけでなく、Beanutils autors にとっても、デフォルトで名前でフィールドにアクセスするためです (その結果、列のエイリアスを持つクエリにアクセスできなくなります)。同時に、それらはプロパティを持っています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)
4

1 に答える 1

0

既知のバグhttps://issues.apache.org/jira/browse/BEANUTILS-383

3 つのパラメーターを受け入れる代替コンストラクター シグネチャを使用するように回避します。

于 2016-03-24T16:24:55.990 に答える