问题
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;
}
}
答案 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
为空。你必须初始化它。