PreparedStatement引发NullPointerException

问题描述 投票:0回答:3

在线出现问题

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

我的数据库一直存在。

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;

}

}
java nullpointerexception prepared-statement
3个回答
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 = ?");

3
投票

显然,因为conn为空。您必须对其进行初始化。


0
投票

当您确实将dabase驱动程序包含到项目中时,会发生这种情况,请检查是否已这样做。

© www.soinside.com 2019 - 2024. All rights reserved.