db4o tracks object by their identity. So if you create a new object with 'new', it will be considered a new object. If you want to update a object, you need to get that object and change it. So here:
Student toUpdate = db4o.query(new Predicate<Student>() {
@Override
public boolean match(Student student) {
return pilot.rollNo.equals("44");
}
}).get(0);
toUpdate.name ="newName";
db4o.store(toUpdate); // Updated
That's it. db4o allway's tracks the actual objects. Not the values.
Note that you can add unique constrains to avoid mistakes. For more about updating, see documentation: http://community.versant.com/documentation/reference/db4o-8.1/java/reference/Content/basics/update_concept.htm