-4

一部の人が意図せずに気分を害したように見えるので、質問を言い換えています(私はJavaの初心者です):(

DB2 データベースに接続しています - ResultSet には、テーブル V_LVCS の最初の 10 行が含まれています。

これを実現したい!

while (rs.next())
{ keys[i] = new V_LVCS();
   keys[i] = this_Row_Object;
}

私は V_LVCS オブジェクトの配列を求めています。現在、以下に示すように各データ行を V_LVCS オブジェクトに変換していますが、これを行うためのより高速な方法があると思います。

 public class V_LVCS {



    public String SERIAL;
        public String TRANSFORMERID;
        public String LVT;

        public V_LVCS() {

        }

        public V_LVCS(String Serial, String Transformerid, String lvt) {
            this.SERIAL = Serial;
            this.TRANSFORMERID = Transformerid;
            this.LVT = lvt;
        }

        public V_LVCS[] getAllV_LVC() {
            try {
                Connection conn = getAMMDBConnection();

                Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
                ResultSet rs;
                rs = stmt.executeQuery("SELECT * FROM V_LVC FETCH FIRST 10 ROWS ONLY");
                rs.last();
                int numRows = rs.getRow();
                V_LVCS[] keys = new V_LVCS[numRows];
                rs.beforeFirst();
                int i = 0;
                while (rs.next()) {


keys[i] = new V_LVCS();
                    keys[i].SERIAL = (rs.getString("SERIAL") == null) ? "" : rs.getString("SERIAL");
                    keys[i].LVT = (rs.getString("LVT") == null) ? "" : rs.getString("LVT");
                    keys[i].TRANSFORMERID = (rs.getString("TRANSFORMERID") == null) ? "" : rs.getString("TRANSFORMERID");
                    ++i;
                }
                conn.close();
                System.out.println("stop!");
                return keys;
            } catch (Exception e) {
                System.err.println("Got an exception! ");
                // System.err.println(e.printStackTrace());
                StringWriter sw = new StringWriter();
                e.printStackTrace(new PrintWriter(sw));
                return null;
            }
        }
    }

私はあなたの考えに本当に感謝しています!(そして、-ve スコアで罰せられる前に、数時間の闘いを望んでいました!)

4

1 に答える 1

5

フィールドに割り当てようとするのではなく、コンストラクターを呼び出すようにループを変更するだけです。

while ( rs.next() ) {           
    String serial = ( rs.getString("SERIAL") == null)?"":rs.getString("SERIAL") ; 
    String lvt = ( rs.getString("LVT") == null)?"":rs.getString("LVT");
    String id = ( rs.getString("TRANSFORMERID") == null)?"":rs.getString("TRANSFORMERID") ;
    keys[i] = new V_LVCS(serial, id, lvt);
    ++i;
}

特に、次の行に注意してください。

V_LVCS [] keys = new V_LVCS[numRows];

V_LVCSへの参照の配列を作成します。これらはすべて です null。要素を逆参照する前に、各要素に何かを割り当てる必要があります。

于 2012-10-18T13:27:01.533 に答える