java - 两个 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);
}
}
解决方案
一件可怕的事情:什么都没有关闭(连接、语句、结果集)。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 多年来不再需要。
对于错误:我只能假设应用程序的可用连接不足。
推荐阅读
- spring - Hibernate hibernate.ddl-auto - 如何避免在应用程序首次启动后手动需要将“create”替换为“update”
- java - 我可以在不使用类名的情况下调用另一个类的静态方法吗?
- python - 两个csv文件的比较和输出有什么不同?
- php - 我的 php 和 html 代码有什么问题?
- r - 获取列表的名称作为数据框中的列
- c++ - Emscripten 声称我在不使用 requestAnimationFrame 的情况下进行渲染
- spring - 使用 fetch 和 @RequestParams("params") List 时如何将列表绑定到控制器
- python - 具有歧义的上下文无关语法 - 使用 Ply lex/yacc 生成器的小型编译器
- loopbackjs - Loopback - 如何维护角色
- ruby-on-rails - mongo驱动程序没有检测到rails中的主节点