El siguiente es el codigo que implementa un cliente JDBC a una fuente de datos ODBC, en la forma de un Java-application

Paquetes a importar

import java.net.URL;
import java.sql.*;
Definicion de la clase
class SimpleSelect {
Definicion de la funcion main
public static void main (String args[]) {
Declaracion de variables y objetos globales
Statement stmt, pstmt;
PreparedStatement pstmt2;
ResultSet rs;
String url   = "jdbc:odbc:DSNAlumnos";
String query = "SELECT ramo,apellido FROM alumnos";
int nCommand =0;
int nRet = 0;
try {
Carga the jdbc-odbc bridge driver
Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver");
Activa un log a la consola de java
//DriverManager.setLogStream(System.out);
Intenta conectarse a un driver que puede procesar la URL definina en url
Connection con = DriverManager.getConnection ( url, "", "");
Si no puede conectarse a algun driver, se genera una excepcion y el control del programa es llevado a la porcion catch de la clase. Revisa y despliega los warning generados por el connect.
checkForWarning (con.getWarnings ());
A partir de la coneccion establecida en el objeto con, obtiene informacion de la coneccion lograda a traves del objeto DatabaseMetaData y luego la despliega
DatabaseMetaData dma = con.getMetaData ();
System.out.println("Connected to " + dma.getURL());
System.out.println("Driver       " + dma.getDriverName());
System.out.println("Version      " + dma.getDriverVersion());
System.out.println("");
A partir del objeto con, crea el objeto stmt (statement), para posteriormente procesar la sentencia SQL contenida en la variable qry
stmt = con.createStatement ();
Ejecuta la sentencia SQL contenida en query, y deja el resultado en el objeto rs (result set)
rs = stmt.executeQuery (query);
Despliega el resultado contenido en el resultet rs. Esta es una funcion descrita mas adelante
dispResultSet (rs);
Cierra los objetos rs y stmt
rs.close();
stmt.close();
Cierra la conexion
con.close();
}catch (SQLException ex) {
Procesa las interrupciones que se puedan haber generado, debido al SQL
System.out.println ("\n*** SQLException caught ***\n");
while (ex != null) {
System.out.println ("SQLState: " + ex.getSQLState ());
System.out.println ("Message:  " + ex.getMessage ());
System.out.println ("Vendor:   " + ex.getErrorCode ());
ex = ex.getNextException ();
System.out.println ("");
}
}catch (java.lang.Exception ex) {
Procesa las interrupciones debido a otro motivo
 
ex.printStackTrace ();
}
}


Funcion para el chequeo y despliegue de los warning de SQL

private static boolean checkForWarning (SQLWarning warn) throws SQLException  {
boolean rc = false;
if (warn != null) {
System.out.println ("\n *** Warning ***\n");
rc = true;
while (warn != null) {
System.out.println ("SQLState: " + warn.getSQLState ());
System.out.println ("Message:  " + warn.getMessage ());
System.out.println ("Vendor:   " + warn.getErrorCode ());
System.out.println ("");
warn = warn.getNextWarning ();
}
}
return rc;
}


Funcion para deplegar el result set

private static void dispResultSet (ResultSet rs) throws SQLException{
int i;
Inicializa el objeto rsmd para recuperar informacion de los nombres de las columnas
ResultSetMetaData rsmd = rs.getMetaData ();
Obtiene el numero de columnas desplegadas
int numCols = rsmd.getColumnCount ();
Despliega el nombre de las columnans
for (i=1; i<=numCols; i++) {
System.out.print(rsmd.getColumnLabel(i) + " ");
}
System.out.println("");
 
Despliega la data correspondiente a cada columnas
boolean more = rs.next ();
while (more) {
Para cada columna despliega su contenido
for (i=1; i<=numCols; i++) {
System.out.print(rs.getString(i) + " ");
}
System.out.println("");
Extrae la siguiente linea del result set
more = rs.next ();
}
}
}