I've removed the nested try/catch from the method addGenre().

I think what we really need (and this would be a big changes) is transaction management.  The problem is difficult, thought, because we support so many different databases.  It would be easier if we were using a ORM tool like Hibernate, but I digress.

I don't think "select max(id)" would be good because of my previous comment; we can't guarantee the query for last insert id was for the db insert just completed in a multi-threaded environment