在我的项目中,我不得不经常使用数据库,并且我决定创建一个接口,然后在不同的类中实现它,因为它们都将使用相同的方法。
public interface Project<E> {
void createTable();
void insert(E obj);
E select(int id);
void delete(int id);
void update(E obj, int id);
}
我尝试在下面的我的一个类中实现它:
public class Person implements Project {
//createTable method
//select method
//delete method
public void insert(Person p) {
Connection connection = null;
PreparedStatement ppStm = null;
try {
connection = ConnectionConfiguration.getConnection();
ppStm = connection.prepareStatement("INSERT INTO person (first_name, last_name)"
+ "VALUES (?,?,?)");
ppStm.setString(1, p.getName());
ppStm.setString(2, p.getLname());
ppStm.executeUpdate();
} catch(Exception e) {
e.printStackTrace();
} finally {
if (ppStm != null){
try {
ppStm.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
//update method similar to insert();
}
问题在于,当我尝试覆盖insert()和update()方法时,会显示一条错误消息“该方法必须覆盖或实现超类型方法” 。我之所以使用泛型,是因为我认为它可以在我的代码中工作,因为我可以使用不同类的不同对象来实现它,但是我猜不到我理解正确的实现。我想知道如何在类中更改接口或其实现,以便它可以工作。另外,当我删除@Override时,它也会删除错误,但仍然表明我没有实现所有方法。 预先谢谢你。
答案 0 :(得分:2)
您可以使用DAO pattern
public interface DAO<T> {
void createTable();
void insert(T t);
T select(int id);
void delete(int id);
void update(T t, int id);
}
实施
class PersonDAO implements DAO<Person> {
@Override
public void createTable() {}
@Override
public void insert(Person person) {
/// Connection connection = null;
/// PreparedStatement ppStm = null;
// Detailed implementation
//// .............
}
@Override
public Person select(int id) {
return null;
}
@Override
public void delete(int id) {}
@Override
public void update(Person person, int id) {}
}