2012-03-06 17 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; 
} 

更新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 2012-03-06 14:43:48

+0

@Ryan實際最大值是2,147,483,647貨幣單位。在韓國,這是「僅」200萬美元! – assylias 2012-03-06 14:46:38

+0

@assylias哦!更好地優化惡性通貨膨脹 – BigOmega 2012-03-06 14:57:13

回答

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 2012-03-06 15:27:59

+0

我假設你的方法被聲明爲public ArrayList yourMethod(args){...}。在這種情況下,您需要將其更改爲公開列表 yourMethod(args){...} – assylias 2012-03-06 15:31:52

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的實施是強制性的。 – 2012-03-06 14:45:57

+0

對getter/setter和語法情況有好處,但他必須改變此解決方案的類,將其從'HRPeople'中的數組改爲使用'String'和'int'。你提到的就像我輸入這個... :) – king14nyr 2012-03-06 14:46:42

1

轉換這樣的:

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

到:

public class HRPerson { 
    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

創建一個類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); 
} 

最後,爲表中的每一行創建新的對象填充它。

相關問題