PreparedStatement抛出NullPointerException

时间:2011-07-12 02:01:22

标签: java nullpointerexception prepared-statement

出现

问题

PreparedStatement pStmt = conn.prepareStatement("select * from employee where upper(FIRSTNAME) like ? and upper(LASTNAME) like ? "

我的数据库存在btw。

public class StubEmployeeRepositoryImpl implements EmployeeRepository {

    private Connection conn;
    private DataSource dataSource;

    // DataSource class encapsulates the driver, database url, username and
    // password information. The dataSource object is automatically created by
    // the Spring framework and passed to the constructor therefore there's no
    // need
    // to instantiate the dataSource variable. A connection can be acquired by
    // accessing the getConnection method of dataSource.
    //
    // Tip: create member variables in this class that will contain the objects
    // passed by the Spring framework so that other methods can access the
    // objects.

    private static Logger log = Logger
            .getLogger(StubEmployeeRepositoryImpl.class);

    public StubEmployeeRepositoryImpl(DataSource dataSource) {
        this.dataSource = dataSource;
    }

    @Override
    public List<Employee> findEmployeesByName(String firstName, String lastName) {

        List<Employee> list = new ArrayList<Employee>();

        try {

            Connection myConnection = dataSource.getConnection();
            PreparedStatement pStmt = conn
                    .prepareStatement("select * from employee where upper(FIRSTNAME) like ? and upper(LASTNAME) like ? "
                            + "order by ID ASC");
            pStmt.setString(1, "%" + firstName.toUpperCase() + "%");
            pStmt.setString(2, "%" + lastName.toUpperCase() + "%");

            ResultSet rs = pStmt.executeQuery();
            while (rs.next()) {
                list.add(new Employee(rs.getInt("ID"), rs
                        .getString("firstName"), rs.getString("middleInitial"),
                        rs.getString("LastName"), rs.getString("level"), rs
                                .getString("workforce"), rs
                                .getString("enterpriseID")));
            }
            rs.close();
            pStmt.close();

        } catch (SQLException e) {

        }
        return list;
    }


    @Override
    public Employee findEmployeeByID(long employeeID) {

        Employee result = null;
        try {
            Connection myConnection2 = dataSource.getConnection();
            PreparedStatement pStmt = conn
                    .prepareStatement("select * from employee where ID = ?");
            pStmt.setInt(1, (int) employeeID);

            ResultSet rs = pStmt.executeQuery();
            if (rs.next()) {
                result = new Employee(rs.getInt("ID"), rs
                        .getString("firstName"), rs.getString("middleInitial"),
                        rs.getString("LastName"), rs.getString("level"), rs
                                .getString("workforce"), rs
                                .getString("enterpriseID"));

            }
            rs.close();
            pStmt.close();
        } catch (SQLException e) {

        }
        return result;
    }

    @Override
    public List<Employee> findEmployeesByProject(long projectID) {

        List<Employee> list = new ArrayList<Employee>();
        try {
            Connection myConnection3 = dataSource.getConnection();
            PreparedStatement pStmt = conn.prepareStatement("");
            pStmt.setInt(1, (int) projectID);

            ResultSet rs = pStmt.executeQuery();
            while (rs.next()) {
                list.add(new Employee(rs.getInt("ID"), rs
                        .getString("firstName"), rs.getString("middleInitial"),
                        rs.getString("LastName"), rs.getString("level"), rs
                                .getString("workforce"), rs
                                .getString("enterpriseID")));
            }
            rs.close();
            pStmt.close();

        } catch (SQLException e) {

        }
        return list;

}

}

2 个答案:

答案 0 :(得分:11)

问题是你永远不会初始化conn

例如,你这样做的地方:

Connection myConnection2 = dataSource.getConnection();
PreparedStatement pStmt = conn.prepareStatement("select * from employee where ID = ?");

conn仍然为空。也许你的意思是:

Connection myConnection2 = dataSource.getConnection();
PreparedStatement pStmt = myConnection2.prepareStatement("select * from employee where ID = ?");

答案 1 :(得分:3)

显然,因为conn为空。你必须初始化它。