Estoy buscando una solución para realizar pruebas unitarias para mi aplicación JDBC, un objeto simulado para SQL y JDBC, ¿alguna idea?

Una de sus mejores opciones podría ser utilizar las capacidades de burla de jOOQ como se documenta en esta publicación de blog aquí:
Fácil burlarse de su base de datos

Un ejemplo simple de cómo producir datos simulados para MockConnection de jOOQ:

MockDataProvider provider = new MockDataProvider() { // Your contract is to return execution results, given a context // object, which contains SQL statement(s), bind values, and some // other context values @Override public MockResult[] execute(MockExecuteContext context) throws SQLException { // Use ordinary jOOQ API to create an org.jooq.Result object. // You can also use ordinary jOOQ API to load CSV files or // other formats, here! DSLContext create = DSL.using(...); Result result = create.newResult(MY_TABLE); result.add(create.newRecord(MY_TABLE)); // Now, return 1-many results, depending on whether this is // a batch/multi-result context return new MockResult[] { new MockResult(1, result) }; } }; // Put your provider into a MockConnection and use that connection // in your application. In this case, with a jOOQ DSLContext: Connection connection = new MockConnection(provider); DSLContext create = DSL.using(connection, dialect); // Done! just use regular jOOQ API. It will return the values // that you've specified in your MockDataProvider assertEquals(1, create.selectOne().fetch().size()); 

Si bien no necesariamente sugeriría insertar una pieza de tecnología como Spring simplemente para esto, tuve mucho éxito al hacerlo con las plantillas jdbc de spring. Hace que el código jdbc sea un poco más fácil de escribir y mucho más fácil de probar. Vea este hilo sobre algunas ideas sobre cómo podría hacer con la plantilla jdbc. http://forum.springsource.org/sh
La otra cosa que hice fue usar una base de datos en memoria para hacer cualquier consulta rápidamente, si lo que le preocupa es la velocidad de las pruebas en ejecución.

Pruebe su capa de servicio utilizando objetos simulados y mantenga toda la lógica allí. Prueba tus clases de base de datos usando DbUnit o algo similar.

Probar sus clases DAO en una base de datos real es excelente para garantizar que su esquema y la configuración de Hibernate estén sincronizadas, así como para ejercer cualquier restricción de clave externa, disparadores y procedimientos almacenados.