Before you can connect to a database, you need to load the
driver. There are two methods available, and it depends on your
code to the best one to use.

In the first method, your code implicitly loads the driver using
the Class.forName() method. For Postgres, you would use:

Class.forName("postgresql.Driver");

This will load the driver, and while loading, the driver will
automatically register itself with JDBC.

Note: The forName() method can throw a
ClassNotFoundException, so you will need to catch it if the driver
is not available.

This is the most common method to use, but restricts your code
to use just Postgres. If your code
may access another database in the future, and you don't use our
extensions, then the second method is advisable.

The second method passes the driver as a parameter to the JVM as
it starts, using the -D argument.

Example:

% java -Djdbc.drivers=postgresql.Driver example.ImageViewer

In this example, the JVM will attempt to load the driver as part
of it's initialisation. Once done, the ImageViewer is started.

Now, this method is the better one to use because it allows your
code to be used with other databases, without recompiling the code.
The only thing that would also change is the URL, which is covered
next.

One last thing. When your code then tries to open a Connection,
and you get a No driver available
SQLException being thrown, this is probably caused by the driver
not being in the classpath, or the value in the parameter not being
correct.