I am assuming/hoping that around a billion times
is a figure of speech because if it is not, that is sure a lot of operations so you might want to re-check your design.
That being said, as for your first question I would recommend Hibernate since it is basically built on top of JDBC and provides you with some handier things such as making you write database independent queries which means that you do not need to re-write your queries should you change your Database.
As per your second question, it really depends on what you want to do:
According to this API:
saveOrUpdate
void saveOrUpdate(Object object)
throws HibernateException
Either save(Object) or update(Object) the given instance, depending upon resolution of the
unsaved-value checks (see the manual for discussion of unsaved-value
checking). This operation cascades to associated instances if the
association is mapped with cascade="save-update".
Parameters: object - a transient or detached instance containing new
or updated state Throws: HibernateException See Also:
save(java.lang.Object), update(Object object)
save
save
Serializable save(Object object)
throws HibernateException
Persist the given transient instance, first assigning a generated
identifier. (Or using the current value of the identifier property if
the assigned generator is used.) This operation cascades to associated
instances if the association is mapped with cascade="save-update".
Parameters: object - a transient instance of a persistent class
Returns: the generated identifier Throws: HibernateException
As per your third question you should provide more information. You could have set values to avoid writing null
values to your database but this really depends on your application and the context within which it will be implemented.