2012-03-06 2 views
0

JDBC를 사용하여 Java 응용 프로그램 서버와 통신하는 데이터베이스 서버가 있습니다. 데이터베이스 ResultSet의 데이터를 Java 변수에 저장하려고합니다.초보자가 Java ArrayList를 사용하여 데이터베이스에서 가져온 ResultSet을 저장하려고 시도했습니다.

여기, 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

@ 라이언 실제로 최대 2,147,483,647 통화 단위입니다. 한국에서는 2 백만 달러에 불과합니다! – assylias

+0

@assylias oh snap! 초 인플레이션을 위해 더 잘 최적화 됨 – BigOmega

답변

5

당신은 아마 처음이 같은 HRPerson를 정의하려면 : 같은

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) {...}로 선언되어 있다고 가정합니다. 어떤 경우에는 공개 목록으로 변경해야합니다. 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); 
} 

yo에 lowerCase 문자를 사용하여이 코드를 개선 할 수 있습니다. ur 필드의 첫 번째 문자 및 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 메서드를 정의해야합니다. 오, 그래, 토마스가 제안한 것을해라.

0

가 LASTNAME FIRSTNAME을 가진 클래스 HRPeople을 만들 ... getters, 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); 
} 

마지막으로 테이블의 각 행에 대해 새 개체를 만들어 입력하십시오.

관련 문제