Hello我想要的是在Console上显示我的数据库表的全部内容。我试图首先从数据库中获取记录并存储在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
请帮我,我已经发布了我的完整代码和数据库 我在哪里出错如何在控制台中显示它
答案 0 :(得分:3)
您必须在toString()
课程中实施EmployeeDTO
。如果您使用的是Eclipse,则可以生成方法:右键单击类 - &gt;来源 - &gt;生成toString()...
答案 1 :(得分: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);
}
答案 2 :(得分: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
答案 3 :(得分:0)
您的DTO中似乎需要toString()
的实施。您将实现它,以便返回一个由您的员工姓名,工作等组成的字符串......这是指向10 tips for implementing toString()的链接。
我还注意到,在您阅读每位员工后,您打印了员工的列表。我怀疑你需要打印员工本身。
System.out.println(employees); // this is the list itself!
答案 4 :(得分:0)
除了行
之外你正在做的一切System.out.println(employees);
在while循环中。
你不能在EmployeeDTO类中显示那些没有重载toString()的ArrayList。
相反,要显示数组列表,请在while循环
之后执行此操作for(EmployeeDTO emp : employees)
{
System.out.println(emp.getEmpNo() + " " + emp.getEName() + " " + emp.getJob());
}