如何将数据库表值转换为java类值?

时间:2016-07-09 11:28:00

标签: java jdbc

我有一个类,它包含表中的所有列作为变量。我想将所有表值作为该类的对象。这是我的表结构,

|col1  | col2  | col3 |
|---------------------|
|a1    | b1    | c1   |
|a2    | b2    | c2   |

我的课是,

public class tab_class{
   String col1;
   String col2;
   String col3;
}

我想要的是我想获取表的值并将这些值存储在每个类变量中。假设我有一个名为'rs'的表的结果集,然后我做了这样的事情,

tab_class tbcl = new tab_class();
while(rs.next()){
   tbcl.col1 = rs.getString("col1");
   tbcl.col2 = rs.getString("col4");
   tbcl.col3 = rs.getString("col3");
}

现在我有一个'tab_class'对象,其值为表格的一行。 现在我想要表的每一行有多个实例。

我怎样才能做到这一点。非常感谢您的想法。

2 个答案:

答案 0 :(得分:0)

您的代码有问题:

tab_class tbcl = new tab_class();
while(rs.next()){
   tbcl.col1 = rs.getString("col1");
   tbcl.col2 = rs.getString("col4");
   tbcl.col3 = rs.getString("col3");
}
  • 当您实际需要为每一行创建一个对象时,您只创建一个且只能创建一个tab_class对象。
  • 这意味着当while循环完成时,只创建了一个对象,并且它只保存从结果集的 last 行返回的数据。
  • 您正在直接访问tab_class的字段,这违反了OOP的封装原则。

我认为你需要简单地创建一个感兴趣类型的对象的ArrayList,因为你需要为ResultSet中的每一行创建一个新的tab_class对象。例如:

List<tab_class> tabList = new ArrayList<>();
while(rs.next()){
   String col1 = rs.getString("col1");
   String col2 = rs.getString("col4");
   String col3 = rs.getString("col3");
   tabList.add(new tab_class( col1, col2, col3); // assuming you have this type of constructor
}

这将创建一个ArrayList,它将表中的所有行保存为tab_class的对象。同样,这假设tab_class有一个带3个字符串的构造函数。如果没有,那么你可以调用setter方法。无论你做什么,都不要将tab_class字段公开或直接设置它们,因为它违背了OOP原则。

另外,您需要学习并使用Java naming conventions。变量名都应以较低的字母开头,而类名以大写字母开头。了解并遵循这一点将使我们能够更好地理解您的代码,并使您能够更好地理解其他代码。

例如,tab_class可以是:

class MyTab {
    // I use constants or an enum to avoid typo errors
    public static final String COLUMN_1 = "col1";
    public static final String COLUMN_2 = "col2";
    public static final String COLUMN_3 = "col3";

    private String col1;
    private String col2;
    private String col3;

    public MyTab(String col1, String col2, String col3) {
        this.col1 = col1;
        this.col2 = col2;
        this.col3 = col3;
    }

    public String getCol1() {
        return col1;
    }

    public String getCol2() {
        return col2;
    }

    public String getCol3() {
        return col3;
    }

    // you'll want an equals, haschCode and toString methods

}

循环:

    List<MyTab> tabList = new ArrayList<>();
    while (rs.next()) {
        // I use constants or an enum to avoid typo errors
        String col1 = rs.getString(MyTab.COLUMN_1);
        String col2 = rs.getString(MyTab.COLUMN_2);
        String col3 = rs.getString(MyTab.COLUMN_3);
        tabList.add(new MyTab(col1, col2, col3));
    }

答案 1 :(得分:0)

你可以像@Hovercraft Full Of Eels那样说。  或者为你的字段创建一个getter和setter方法

public class tab_class implements Serializable{

  private static final long serialVersionUID = 1L;     

  private String col1;
  private String col2;
  private String col3;

   public void setCol1(String col1){
        this.col1 = col1;
   }

   public String getCol1(){
        return col1;
   }

   public void setCol2(String col2){
        this.col2 = col2;
   }

   public String getCol2(){
        return col2;
   }

    public void setCol3(String col3){
        this.col3 = col3;
   }

   public String getCol3(){
        return col3;
   }       

}

然后

List<tab_class> tbcl_list = new ArrayList<>();
while(rs.next()){
   tab_class tblc = new tab_class();
   tbcl.setCol1(rs.getString("col1"));
   tbcl.setCol2(rs.getString("col2"));
   tbcl.setCol3(rs.getString("col3"));
   tbcl_list.add(tbcl);
}

现在在tbcl_list中,您将所有行都作为对象。