首页 > 解决方案 > 两个 jtable 的代码相同,但其中一个没有从 SQL 表中获取值

问题描述

请帮我解决这个问题,还告诉我如何使用组合框上的条件在表格上显示数据。以下是代码和输出。请帮助我,因为我明天必须向我的导师展示这个。

public ArrayList<User> userList() {
    ArrayList<User> usersList = new ArrayList<>();
    try{
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        String url="jdbc:sqlserver://localhost:1433;databasename=DB_Project;user=User;Password=password";
        Connection con= DriverManager.getConnection(url);
        String query = "SELECT * FROM tbl_Income";
        Statement st=con.createStatement();
        ResultSet rs= st.executeQuery(query);
        User user;
        while(rs.next()){
            user= new User(rs.getInt("Amout"),rs.getString("Date"),rs.getString("Source"));
            usersList.add(user);          
        }
    }
    catch(Exception e){
        JOptionPane.showMessageDialog(null,e);
    }
    return usersList;
    }
public void show_user() {
    ArrayList<User> list = userList();
    DefaultTableModel model = (DefaultTableModel)Income_Table.getModel();
    Object[] row =new Object[3];
    for(int i=0;i<list.size();i++){
        row[0]=list.get(i).getAmout();
        row[1]=list.get(i).getDate();
        row[2]=list.get(i).getSource();
        model.addRow(row);
    }
}

//**********tbl_Expense
public ArrayList<User_E> userList_E() {
    ArrayList<User_E> UsersList_E = new ArrayList<>();
    try{
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        String eurl="jdbc:sqlserver://localhost:1433;databasename=DB_Project;user=User;Password=password";
        Connection con= DriverManager.getConnection(eurl);
        String query_E = "SELECT * FROM tbl_Expense";
        Statement stt=con.createStatement();
        ResultSet rst= stt.executeQuery(query_E);
        User_E user_e;
        while(rst.next()){
            user_e = new User_E(rst.getString("ExpenseDetail"),rst.getString("Category"),rst.getString("Date"),rst.getInt("Amount"));
            UsersList_E.add(user_e);
    }
    }
    catch(Exception e){
        JOptionPane.showMessageDialog(null,e);
    }
    return UsersList_E;
}
public void showuser_E(){
    ArrayList<User_E> list_E = userList_E();
    DefaultTableModel model_e = (DefaultTableModel)Expense_Table.getModel();
    Object[] row_e =new Object[4];
    for(int i=0;i<list_E.size();i++){
        row_e[0]=list_E.get(i).getAmount();
        row_e[1]=list_E.get(i).getDate();
        row_e[2]=list_E.get(i).getCategory();
        row_e[3]=list_E.get(i).getExpenseDetail();
        model_e.addRow(row_e);
    }
}

这是输出,得到 0 而不是原始数据

标签: javasqlnetbeans-8

解决方案


一件可怕的事情:什么都没有关闭(连接、语句、结果集)。Try-with-resources 在这里可能会有所帮助,以自动关闭这些资源,即使在返回、中断、引发异常时也是如此。

public ArrayList<User_E> userList_E() {
    ArrayList<User_E> usersList_E = new ArrayList<>();
    String eurl = "jdbc:sqlserver://localhost:1433;databasename=DB_Project;"
        + "user=User;Password=password";
    String query_E = "SELECT * FROM tbl_Expense";
    try (Connection con = DriverManager.getConnection(eurl);
            Statement stt = con.createStatement();
            ResultSet rst= stt.executeQuery(query_E)) {
        while(rst.next()){
            User user_e = new User_E(rst.getString("ExpenseDetail"),
                                     rst.getString("Category"),
                                     rst.getString("Date"),
                                     rst.getInt("Amount"));
            usersList_E.add(user_e);
        }
    }
    catch(SQLException e){
        JOptionPane.showMessageDialog(null, e.getMessage());
    }
    return usersList_E;
}

驱动程序类上的 Class.forName 多年来不再需要。

对于错误:我只能假设应用程序的可用连接不足。


推荐阅读