2013-05-14 289 views
1
public C[] getC() throws SQLException, ClassNotFoundException { 
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
    String url = "jdbc:odbc:Mydb"; 
    String user = "user1"; 
    String password = "password"; 
    Connection con = DriverManager.getConnection(url,user,password); 
    Statement smt= con.createStatement(); 
    String query = "Select ssn, cname from customer"; 
    ResultSet rs = smt.executeQuery(query); 
    C [] c = new C[getNumberOfCustomers()]; 
    while (rs.next()){ 
     String ssn = rs.getString("ssn"); 
     String customer_name = rs.getString("cname"); 
    }  
    return custarray;  
} 

這裏是C的代碼:如何將數據庫值映射到對象數組?

public class C { 

    private String name; 
    private String SocialSecurityNumber; 

    public C(String name, String SocialSecurityNumber) { 
     this.name = name; 
     this.SocialSecurityNumber = SocialSecurityNumber; 
    } 

    public String getName() { return name; } 
    public void setName(String name) { this.name = name; } 
    public String getSocialSecurityNumber() { return SocialSecurityNumber; } 
    public void setSsn(String SocialSecurityNumber) { 
     this.SocialSecurityNumber = SocialSecurityNumber; 
    } 
} 

在這裏,我順便SSN和CUSTOMER_NAME到C[]陣列

+3

請張貼的Ç – Aubin 2013-05-14 17:34:48

+2

您有什麼問題的代碼? – 2013-05-14 17:36:13

+0

你忘了實際創建C對象(壞名字btw)並將它們添加到數組中。這是你的實際問題嗎?這真的需要一個問題嗎? – 2013-05-14 18:42:54

回答

1
C [] c = new C[getNumberOfCustomers()]; 
int i = 0; 
while (rs.next()){ 
    c[i++] = new C(rs.getString("cname"), rs.getString("ssn")); 
} 

FYI具有問題:甲List<C>will be better than an array of C,下面的代碼使用一個可重複使用的列表,new僅在target == null(例如第一次使用)時發生。

public List<C> getC(List<C> target) throws SQLException,ClassNotFoundException{ 
    if(target == null) { 
     target = new LinkedList<C>(); 
    } 
    else { 
     target.clear(); 
    } 
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
    String url = "jdbc:odbc:Mydb"; 
    String user = "user1"; 
    String password = "password"; 
    Connection con = DriverManager.getConnection(url,user,password); 
    Statement smt= con.createStatement(); 
    String query = "Select ssn, cname from customer"; 
    ResultSet rs = smt.executeQuery(query); 
    while(rs.next()){ 
     target.add(new C(rs.getString("cname"), rs.getString("ssn"))); 
    } 
    return target; 
} 
+0

我得到NullPointerException異常的above.Here是代碼公共類C {1 \t私人字符串名稱; \t \t private String SocialSecurityNumber; \t \t public C(String name,String SocialSecurityNumber){ \t \t this.name = name; \t \t this.SocialSecurityNumber = SocialSecurityNumber; \t} \t \t公共字符串的getName(){ \t \t回報名; \t} \t \t 公共無效的setName(字符串名稱){ \t \t this.name =名; \t} \t \t 公共字符串getSocialSecurityNumber(){ \t \t返回socialSecurityNumber的; \t} \t公共無效setSsn(字符串socialSecurityNumber的){ \t \t this.SocialSecurityNumber = socialSecurityNumber的; \t} – user2382753 2013-05-14 18:04:14

+0

是的,你說得對,代碼編輯 – Aubin 2013-05-14 18:11:36

0

你可以這樣做:

List<C> list = new ArrayList<C>(); 
while (rs.next()){ 
    String ssn = rs.getString("ssn"); 
    String customer_name = rs.getString("cname"); 
    C c = new C(ssn, customer_name); 
    list.add(c); 
} 
C[] lc = new C[list.size()]; 
list.toArray(lc); 
+0

我們假定你是一個特定的'C'構造的存在。是什麼讓你認爲它確實存在? – 2013-05-14 17:54:16