adicional a lo que se comenta en el post anterior puedes ps.execute() por ps.executeUpdate()
para hacer rastreo de pila puedes hacer
StackTraceElement[] st = excepcion.getStackTrace();
for (int ix = 0; ix < st.length; ix++) {
error = error + st[ix];
}
Siempre obtén una conexión y al final ciérrala. En el caso que te he puesto, la conexión se cierra automáticamente porque estoy usando try catch with resources una nueva característica de Java 7 que hace que los flujos y conexiones se cierren automáticamente.
Interesante Gus Garsaky no conocia esta caracteristica, es decir en vez de hacer el bloque try/catch/finally el mismo try realiza el cierre de las conexiones vea pues