JDBC and ODBC are sort of competitors. ODBC is Microsofts API for accessing data in an RDBMS. By changeing drivers one could port a program from MySQL to Oracle. The program does not have to change because it uses a standard API to access the database. JDBC is a similar technology in JavaLand. In a two tier architecture the application program that makes access directly to the database and publishes an output. In a three tier architecture some middleware ( classes objects ) provide a buffer between the database and the client. Suppose you had a database tables of customers, phone numbers, and addresses. A given client might need data out of these three tables for an address book like presentation. Now an application client ( SWING ) might fetch all this data itself. A second web client could fetch it all too. Now if there is a change in the database where the customer table gets split into two tables both clients have to be re-worked. If the database is hidden behind a class and the customer table gets split then maybe only the class the supports both the web client and the application client will need to be modifed. Its gets easier if both clients use a common class to validate addresses rather than each having their own private routines.