1

您好,我只想在控制台上显示我的数据库表的全部内容。我正在尝试首先从数据库中获取记录并存储在 ArrayList 中,但它没有显示任何内容,它显示以下内容:

[com.suven.java.EmployeeDTO@970c0e]
[com.suven.java.EmployeeDTO@970c0e, com.suven.java.EmployeeDTO@987197] 
[com.suven.java.EmployeeDTO@970c0e, com.suven.java.EmployeeDTO@987197, com.suven.java.EmployeeDTO@497904]

我完全不知道该怎么做。我的代码是:

EmployeeDTO java file

public class EmployeeDTO 
{
    //private properties
    private int empNo;
    private String eName;
    private String jobTitle;
    //setters
    public void setEmpNo(int val){empNo=val;}
    public void setEName(String val){eName=val;}
    public void setJob(String val){jobTitle=val;}
    // getters
    public int getEmpNo(){return empNo;}
    public String getEName(){return eName;}
    public String getJob(){return jobTitle;}
}

我的 EmployeeList java 代码是:

public class EmployeeList 
{

  public static void main(String argv[]) 
  {
   Connection conn=null;
   Statement stmt=null;
   ResultSet rs=null;      

   try 
   {
    // Load the JDBC driver  
    // This can be skipped for Derby, but derbyclient.jar has to be in the CLASSPATH   
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    String accessFileName = "E:/Database/java";
    conn=DriverManager.getConnection("jdbc:odbc:DRIVER={Microsoft Access  Driver (*.mdb, *.accdb)};DBQ="+accessFileName+".accdb;");

    // Build an SQL String 
    String sqlQuery = "SELECT * from Employee"; 

    // Create a Statement object
    stmt = conn.createStatement(); 

    // Execute SQL and get obtain the ResultSet object
    rs = stmt.executeQuery(sqlQuery);  
    ArrayList<EmployeeDTO> employees = new ArrayList<EmployeeDTO>();
    // Process the result set - print Employees
    while (rs.next())
    { 
        EmployeeDTO currentEmp = new EmployeeDTO();

        currentEmp.setEmpNo(rs.getInt("EMPNO"));
        currentEmp.setEName(rs.getString("ENAME"));
        currentEmp.setJob(rs.getString("JOB_TITLE"));
        employees.add(currentEmp);
        System.out.println(employees);
    }       
   } 
   catch( SQLException se ) 
   {
      System.out.println ("SQLError: " + se.getMessage ()+ " code: " + se.getErrorCode ());
   }
   catch( Exception e )
   {
      System.out.println(e.getMessage());
      e.printStackTrace(); 
   }
   finally
   {
       // clean up the system resources
       try
       {
       rs.close();     
       stmt.close(); 
       conn.close();  
       }
       catch(Exception e)
       {
           e.printStackTrace();
       } 
   }
}
}

我的数据库是:

Employee
EMPN     ENAME     JOB_TITLE
1        abc       xyz
2        pqr       mno
3        lmn       hij

请帮助我,我已经发布了我的完整代码和数据库我哪里出错了如何在控制台中显示它

4

5 回答 5

3

你必须toString()在你的EmployeeDTO课堂上实施。如果您使用的是 Eclipse,您可以生成方法:右键单击类 -> 源 -> 生成 toString()...

于 2012-12-12T10:46:39.890 回答
1

你需要toString在你的EmployeeDTO类中覆盖。您可以使用String.format进行格式化:

@Override
public String toString() {
   return String.format("%d\t%s\t%s", empNo, eName, jobTitle);
}

要将每个打印employee在单独的行上,您可以使用:

for (EmployeeDTO employee : employees) {
    System.out.println(employee);
}
于 2012-12-12T10:47:02.417 回答
1
ArrayList<EmployeeDTO> employees = new ArrayList<EmployeeDTO>();
// Process the result set - print Employees
while (rs.next())
{ 
    EmployeeDTO currentEmp = new EmployeeDTO();

    currentEmp.setEmpNo(rs.getInt("EMPNO"));
    currentEmp.setEName(rs.getString("ENAME"));
    currentEmp.setJob(rs.getString("JOB_TITLE"));
    employees.add(currentEmp);
    System.out.println(employees);
}       

在此代码中,您将 Object 放入 ArrayList,而不是实际的 String/Value 放入其中。这就是为什么你得到 com.suven.java.EmployeeDTO@970c0e

于 2012-12-12T10:48:37.450 回答
0

看起来你需要toString()在你的 DTO 中实现。您将实现它,使其返回一个由您的员工姓名、工作等组成的字符串......这是一个链接,指向实现 toString() 的 10 个技巧

我还注意到,您在阅读每个员工后打印员工列表。我怀疑您需要打印员工本身。

System.out.println(employees); // this is the list itself!
于 2012-12-12T10:46:28.417 回答
0

你做得很好,除了排队

System.out.println(employees);

在while循环中。

如果没有在 EmployeeDTO 类中重载 toString() ,就不能像那样显示 ArrayList 。

相反,要显示数组列表,请在 while 循环之后执行此操作

for(EmployeeDTO emp : employees)
{
    System.out.println(emp.getEmpNo() + " " +  emp.getEName() + " " + emp.getJob());
}
于 2012-12-12T10:57:33.410 回答