2012-03-06 3 views
0

JDBCを使用してJavaアプリケーションサーバーと通信するデータベースサーバーがあります。私はデータベースResultSetからのデータをJava変数に格納したいと思います。ここで初心者Java ArrayListを使用してデータベースから取得したResultSetを格納しようとしています

は私のJavaクラスは、HRPeopleです:

public class HRPeople { 
    public int elements; 
    public String[] FirstName; 
    public String[] LastName; 
    public String[] Email; 
    public int[] Salary; 
} 

次のように私は現在、ResultSetのデータを保存するために、このクラスを使用します。

query = "SELECT first_name, last_name, email, salary FROM HR.Employees where rownum < 6"; 
rset = stmt.executeQuery(query); 
while (rset.next()) { 
    returnHRdata.FirstName[ii] = rset.getString("first_name"); 
    returnHRdata.LastName[ii] = rset.getString("last_name"); 
    returnHRdata.Email[ii]  = rset.getString("email"); 
    returnHRdata.Salary[ii] = rset.getInt("salary"); 
    ii = ii + 1; 
} 

上記のシナリオに問題がプリミティブ配列ということですこれらの配列を適切に初期化できるように、ResultSetの行数を知る必要があります。だから、私がやりたいことは代わりにArrayListを使うことです。これを行うには、上記のシナリオをどのように変更しますか?

これは私の最初の試みです(これは近いですか?)上記のHRPeople.javaファイルはこのシナリオでも使用されていますか?

query = "SELECT first_name, last_name, email, salary FROM HR.Employees where rownum < 6"; 
rset = stmt.executeQuery(query); 
List<HRPeople> returnHRdata = new ArrayList<HRPeople>(); 
while (rset.next()) { 
    returnHRdata.FirstName = rset.getString("first_name"); 
    returnHRdata.LastName = rset.getString("last_name"); 
    returnHRdata.Email  = rset.getString("email"); 
    returnHRdata.Salary = rset.getInt("salary"); 
    returnHRdata.add; 
} 

UPDATE 1:

私はコードに追加する場合は、次の、

return returnHRdata; 

私は次のようなエラー(任意のアイデアなぜ?)を得る:

myClass.java:213: incompatible types 
found : java.util.List<HRPerson> 
required: java.util.ArrayList<HRPerson> 
    return returnHRdata; 
     ^
1 error 
+1

最高給与は2,147,483,647ドルですか? – BigOmega

+0

@Ryan実際には最大2,147,483,647通貨単位です。韓国では、それは「唯一の」2百万ドルです! – assylias

+0

@assylias oh snap!ハイパーインフレーションの最適化 – BigOmega

答えて

5

public class HRPerson { 
    public String firstName; 
    public String lastName; 
    public String email; 
    public int salary; 
} 

次に、あなたのメインのコードは次のようになります。

query = "SELECT first_name, last_name, email, salary FROM HR.Employees where rownum < 6"; 
rset = stmt.executeQuery(query); 
List<HRPerson> returnHRdata = new ArrayList<HRPerson>(); 
while (rset.next()) { 
    HRPerson person = new HRPerson(); 
    person.firstName = rset.getString("first_name"); 
    person.lastName = rset.getString("last_name"); 
    person.email  = rset.getString("email"); 
    person.salary = rset.getInt("salary"); 
    returnHRdata.add(person); 
} 
+0

いいね。 'return returnHRdata;'を追加すると、コンパイルエラーが発生します(上記のUPDATE 1を参照)。どんな考え? – ggkmath

+0

あなたのメソッドがpublic ArrayListとして宣言されていると仮定します yourMethod(args){...}。あなたはそれをpublicリストに変更する必要があります yourMethod(args){...} – assylias

1
List<HRPeople> returnHRdata = new ArrayList<HRPeople>(); 
while (rset.next()) { 
    HRPeople people = new HRPeople(); 
    people.FirstName = rset.getString("first_name"); 
    people.LastName = rset.getString("last_name"); 
    people.Email = rset.getString("email"); 
    people.Salary = rset.getInt("salary"); 
    returnHRdata.add(people); 
} 

このコードを改善するには、lowerCase文字を使用してくださいあなたのフィールドの最初の文字を取得し、gettersとsetterを使ってアクセスします。

+0

ああ、私は、HRPeopleが配列を使用しているのを見ていませんでした。もちろん、以下に示すHRPeopleの実装は必須です。 –

+0

getter/setterと構文の場合には良い点ですが、このソリューションのクラスを変更する必要があります。単に 'HRPeople'の配列を' String'と 'int'に変更する必要があります。あなたは私がこれをタイプしたのと同じように言及しました::) – king14nyr

1

変換この:

public class HRPerson { 
    public String firstName; 
    public String lastName; 
    public String email; 
    public int salary; 
} 

と::

public class HRPeople { 
    public int elements; 
    public String[] FirstName; 
    public String[] LastName; 
    public String[] Email; 
    public int[] Salary; 
} 

に今

List<HRPerson> people = new ArrayList<HRPerson>(); 

それは簡単なはず:

while (rset.next()) { 
    HRPerson person = new HRPerson(); 
    returnHRdata.firstName = rset.getString("first_name"); 
    returnHRdata.lastName = rset.getString("last_name"); 
    returnHRdata.email = rset.getString("email"); 
    returnHRdata.salary = rset.getInt("salary"); 
    people.add(person); 
} 
0

閉じる...

while (rset.next()) { 
    HRPeople person = new HRPeople(); 
    person.setFirstName(rset.getString("first_name")); 
    person.setLastName(rset.getString("last_name")); 
    person.setEmail(rset.getString("email")); 
    person.setSalary(rset.getInt("salary")); 
    returnHRdata.add(person); 
} 

もちろん、HRPersonクラスでsetXXXXメソッドを定義する必要があります。ええと、トーマスが提案したことをしてください。おそらく、最初にこのようHRPersonを定義したい

0

姓ファーストネームを持つクラスのHRPeopleを作成、... .getter、settersメソッドを宣言します。次いで

List<HRPeople> returnHRdata = new ArrayList<HRPeople>(); 
HRPeople people = null; 
while (rset.next()) { 
    people = new HRPeople(); 
    people.setFirstName(rset.getString("first_name")); 
    people.setLastName (rset.getString("last_name")); 
... 
    returnHRdata.add(people); 
} 
0

の代わりに、オブジェクトの各プロパティの配列を格納する、テーブル内の特定のエンティティを記述するために単一のオブジェクトを作成します。

class HRPerson { 
    String firstName; 
    String lastName; 
    String email; 
    Integer salary; 
} 

結果を保存できるように、このタイプのリストを作成します。

List<HRPerson> hrPeople = new ArrayList<HRPerson>(); 

while(rset.next()) { 
    HRPerson person = new HRPerson(); 
    person.firstName = rset.getString("first_name"); 
    person.lastName = rset.getString("last_name"); 
    person.email  = rset.getString("email"); 
    person.salary = rset.getInt("salary"); 

    hrPeople.add(person); 
} 

最後に、テーブルの各行に新しいオブジェクトを作成して入力します。

関連する問題