Ich habe ein Problem mit der Zeile pstmt.setLong(1, id);
. Ich bekomme einen Fehler, dass der Wert für die Parameternummer 1 nicht festgelegt ist. Wenn ich die Zeichenfolge SQL ohne das Fragezeichen verwende, funktioniert es. Auch, wenn ich ARM verwenden die PreparedStatement
und ResultSet
nicht automatisch geschlossen, so muss ich sie schließen, und schließlich scheint nichtcom.microsoft.sqlserver.jdbc.SQLServerException: Der Wert ist nicht für die Parameternummer eingestellt 1
@Override
public Company getCompany(long id) {
Connection con = ConnectionPool.getInstance().getConnection();
String sql = "SELECT * FROM Company WHERE ID=?";
//String sql = "SELECT * FROM Company WHERE ID=" + id;
Company company = new Company();
try (
PreparedStatement pstmt = con.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();)
{
pstmt.setLong(1, id);
if (rs.next()) {
company.setId(rs.getLong(1));
company.setCompName(rs.getString(2));
company.setPassword(rs.getString(3));
company.setEmail(rs.getString(4));
} else {
System.out.println("Company with ID: " + id + " could not be found\n");
}
pstmt.close();
rs.close();
} catch (SQLException e) {
CouponSystemException ex = new CouponSystemException("Company with ID: " + id + " could not be retrieved\n", e);
System.out.println(ex.getMessage());
System.out.println(e);
}
ConnectionPool.getInstance().returnConnection(con);
return company;
}