public static ArrayList<Object[]> getCalcAuto() { ArrayList<Object[]> list = new ArrayList<>(); Connection conn = ArgusMysql.getConnection(); if (null == conn) { return list; } try { QueryRunner runner = new QueryRunner(); String sql = "xxxxxxxxxxxxxxxxxxx"; System.out.println("Query sql is: " + sql); list = (ArrayList<Object[]>) runner.query(conn, sql, new ArrayListHandler()); } catch (SQLException e) { e.printStackTrace(); } finally { DbUtils.closeQuietly(conn); } return list; }
时间: 2023-06-16 18:07:57 浏览: 53
这是一个 Java 方法,主要作用是从数据库中查询一些自动计算的数据并返回一个 ArrayList<Object[]> 类型的集合。其中,使用了 Apache Commons DbUtils 库提供的 QueryRunner 类来执行查询操作,查询结果使用了 ArrayListHandler 类封装。如果数据库连接失败,方法会返回一个空的集合。如果在执行查询时发生异常,会打印异常信息。最后,无论方法是否正常结束,都会关闭数据库连接。
相关问题
ArrayList<Salary> salaries = new SalaryServiceImpl().selectByEmpid(select.get(num).getEmpId());
这行代码的意思是使用 `SalaryServiceImpl` 中的 `selectByEmpid` 方法查询出符合条件的 `Salary` 对象集合,并将结果赋值给 `ArrayList<Salary>` 类型的变量 `salaries`。其中,`select.get(num).getEmpId()` 表示获取 `select` 集合中索引为 `num` 的元素的 `empId` 属性值,作为 `selectByEmpid` 方法的参数,用于查询该员工的薪资信息。
假设 `SalaryServiceImpl` 的 `selectByEmpid` 方法是按照员工编号 `empId` 查询该员工的薪资信息的,其代码可能类似于下面这样:
```java
public List<Salary> selectByEmpid(int empId) {
List<Salary> list = new ArrayList<>();
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try {
// 获取数据库连接
conn = getConnection();
// 创建 PreparedStatement 对象
stmt = conn.prepareStatement("select * from salary where emp_id = ?");
stmt.setInt(1, empId);
// 执行查询操作
rs = stmt.executeQuery();
// 将查询结果封装成 Salary 对象列表
while (rs.next()) {
Salary salary = new Salary();
salary.setId(rs.getInt("id"));
salary.setEmpId(rs.getInt("emp_id"));
salary.setAmount(rs.getBigDecimal("amount"));
salary.setPayDate(rs.getDate("pay_date"));
list.add(salary);
}
} catch (SQLException e) {
// 异常处理
} finally {
// 关闭数据库连接
close(conn, stmt, rs);
}
return list;
}
```
在上面的代码中,我们首先获取数据库连接,然后创建 `PreparedStatement` 对象并设置查询参数,执行查询操作并封装查询结果,最后关闭数据库连接并返回查询结果。
优化这段代码:package com.ethan.dao; import java.awt.List; import java.sql.Connection; import java.sql.ResultSet; import java.util.ArrayList; import com.ethan.model.*; import com.ethan.util.DBUtil; import com.mysql.jdbc.PreparedStatement; public class StudentDao { private static Connection conn = DBUtil.getConn(); private static PreparedStatement pstmt = null; private static ResultSet rs = null; public static ArrayList<Student> findAllStuden() throws Exception { String sql = "select * from student"; pstmt = (PreparedStatement) conn.prepareStatement(sql); ResultSet rs = pstmt.executeQuery(); ArrayList<Student> list = new ArrayList<Student>(); while (rs.next()) { Student student = new Student(); student.setUserId(Integer.parseInt(rs.getString("userId"))); student.setUserName(rs.getString("userName")); student.setSex(rs.getString("sex")); student.setBirthYear(rs.getString("birthYear")); student.setGrade(rs.getString("grade")); student.setCollegeName(rs.getString("collegeName")); list.add(student); } return list; } }
下面是对代码进行优化的建议:
1. 将导入的类按需引入,避免不必要的导入。
2. 使用 try-with-resources 来自动关闭连接和语句对象,避免资源泄漏。
3. 使用 Java 8 的 Stream API 简化结果集的处理,减少手动映射的代码量。
优化后的代码如下所示:
```java
package com.ethan.dao;
import com.ethan.model.Student;
import com.ethan.util.DBUtil;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
public class StudentDao {
public static List<Student> findAllStudent() throws Exception {
String sql = "SELECT * FROM student";
try (Connection conn = DBUtil.getConn();
PreparedStatement pstmt = conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery()) {
List<Student> list = new ArrayList<>();
while (rs.next()) {
Student student = new Student();
student.setUserId(rs.getInt("userId"));
student.setUserName(rs.getString("userName"));
student.setSex(rs.getString("sex"));
student.setBirthYear(rs.getString("birthYear"));
student.setGrade(rs.getString("grade"));
student.setCollegeName(rs.getString("collegeName"));
list.add(student);
}
return list;
}
}
}
```
通过上述优化,我们使用了 try-with-resources 语句来自动关闭连接、预处理语句和结果集对象。同时,使用了 Java 8 中的 Stream API 来简化结果集的处理,减少了手动映射的代码量。这样可以提高代码的可读性和可维护性。