2013-05-14 286 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