SQL was designed to query data stored in relational database management systems � as a tool it operates in the Relational paradigm. Java is an Object-Oriented Programming Language � as a tool it operates in the Object-Oriented paradigm.
The task of reconstituting objects from pure data retrieved from an RDBMS and later distilling objects to pure data to be stored in the RDBMS can be a complex and onerous task, which is why the term Object-Relational Impedance Mismatch is usually associated with that task. In many cases the database does much more for the business then just serve as a persistent store for OO applications � so the DB Data-model and the OO Domain Model (which can vary from application to application) may not even align properly.
JDBC simply allows you to query and modify data in the database with SQL DML (including the escape syntax to use stored procedures) but is does not reconstitute or save Domain Objects.
Object Relational Mapping (ORM) tools attempt to address the Object-Relational Impedance Mismatch by providing a general framework that through configuration knows how to map your Domain Objects to/from the Database so that you can concentrate on the Domain Model and it's business rules.
Just some articles that deal with the problems and solutions to the Object-Relational Impedance Mismatch before Object-Relational Mapping became more common:
What you also find out is that when you have JDBC code directly in your code, you write much more code, which costs money to maintain. Then you end up refactoring and refactoring to make it nicer and easier, and after a while you find that you start creating the same kind of design that an ORM tool already gives you, or you hope so.
With an ORM tool, you can concentrate more on business logic and not on lower levels like direct JDBC calls.