What is JDBC? Introduction to Java Database Connectivity

JDBC (Java Database Connectivity) is the Java API that manages connecting to a database, issuing queries and commands, and handling end result sets obtained from the database. Unveiled as section of JDK 1.1 in 1997, JDBC was one particular of the earliest libraries produced for the Java language.

JDBC was in the beginning conceived as a shopper-facet API, enabling a Java client to interact with a knowledge resource. That transformed with JDBC 2., which incorporated an optional package deal supporting server-side JDBC connections. Each new JDBC launch considering the fact that then has highlighted updates to both of those the consumer-aspect package deal (java.sql) and the server-facet bundle (javax.sql). JDBC 4.3, the most existing model as of this writing, was launched as element of Java SE 9 in September 2017 as JSR 221.

This post provides an overview of JDBC and JDBC motorists, adopted by a fingers-on introduction to working with JDBC to link a Java shopper to a lightweight relational database.

How JDBC will work

As a developer, you can use JDBC to interact with a databases from within just a Java system. JDBC acts as a bridge from your code to the database, as revealed in Determine 1.

JDBC connects Java programs to databases. IDG

Figure 1. JDBC connects Java packages to databases.


Ahead of JDBC, builders used Open Database Connectivity (ODBC), a language-agnostic regular technique to accessing a relational databases management system, or RDBMS. In some strategies, JDBC can take its inspiration from ODBC. The variance is that JDBC is Java-particular, featuring a programming-degree interface that handles the mechanics of Java purposes speaking with a databases.

JDBC’s architecture

The JDBC interface consists of two levels:

  1. The JDBC API supports communication among the Java application and the JDBC supervisor.
  2. The JDBC driver supports interaction in between the JDBC supervisor and the database driver.

The JDBC API and JDBC driver have been refined extensively more than the several years, resulting in a function-loaded, performant, and reputable library.

JDBC is the widespread API that your software code interacts with. Beneath that is the JDBC-compliant driver for the database you are applying.

Figure 2 illustrates the JDBC architecture.

The JDBC interface consists of the JDBC API and its drivers. IDG

Determine 2. JDBC’s architecture is made up of the JDBC API and JDBC motorists.

JDBC motorists

As an application programmer, you really do not will need to instantly be worried with the implementation of the driver you use, so long as it is secure and formal. Having said that, it is useful to be conscious that there are 4 JDBC driver types:

  1. JDBC-ODBC bridge driver: A slender Java layer that makes use of an ODBC driver beneath the hood.
  2. Native API driver: Delivers an interface from Java to the native database client.
  3. Middleware driver: A common interface (“middleware”) involving Java and the RDBMS’s vendor-precise protocol.
  4. Pure Java driver: A driver that implements the seller-unique protocol specifically in Java.

When you start out wondering about architecture and overall performance, it will be useful to look at the style of driver you are applying.

Easy database connections and queries

Just one of the benefits of programming in the Java ecosystem is that you will most likely locate a stable JDBC databases connector for whatever databases you choose. In this tutorial, we will use SQLite to get to know JDBC, mostly due to the fact it can be so easy to use.

The techniques for connecting to a database with JDBC are as follows:

  1. Install or identify the database you want to entry.
  2. Incorporate the JDBC library.
  3. Be certain the JDBC driver you will need is on your classpath.
  4. Use the JDBC library to receive a connection to the database.
  5. Use the connection to problem SQL instructions.
  6. Near the connection when you are completed.

We’ll go through these methods with each other.

Action 1. Download and set up SQLite

SQLite is a pretty compact databases. It isn’t really supposed for output use but is a wonderful selection for quickly hoping points out. SQLite employs a file as its functional databases, without necessitating any provider or daemon installations.

To get began with this demonstration, initial download the SQLite sample database. Unzip the .db file and save it somewhere you is not going to neglect. This file has both equally a purposeful file-centered databases and sample schema and information that we can use.

Stage 2. Import JDBC into your Java application

We could do our coding in an IDE, but coding specifically in a textual content editor will better reveal JDBC’s simplicity. To begin, you will will need to have a suitable JDK installation for your functioning process.

Assuming you have a JDK mounted, we can start out by producing a very simple Java system. In your text editor, paste in the code proven in Listing 1. Get in touch with this file WhatIsJdbc.java.

Listing 1. A uncomplicated Java plan

class WhatIsJdbc
  public static void most important(String args[])
      Technique.out.println("Good day InfoWorld")

Now, compile the code by moving into the command: javac WhatIsJdbc.java. Compiling will output the WhatIsJdbc.class file. Execute this file from the command line with the call: java WhatIsJdbc.

The moment you have a simple Java plan, you can include things like the JDBC libraries. Paste in the code from Listing 2 at the head of your simple Java software.

Listing 2. JDBC imports

import java.sql.Link
import java.sql.DriverManager
import java.sql.SQLException
import java.sql.ResultSet
import java.sql.Statement

Each and every of these imports presents entry to a class that facilitates the standard Java databases relationship:

  • Link signifies the relationship to the database.
  • DriverManager obtains the relationship to the database. (Yet another option is DataSource, applied for link pooling.)
  • SQLException handles SQL glitches between the Java software and the databases.
  • ResultSet and Statement design the info final result sets and SQL statements.

You will see every of these in action soon.

Step 3. Include the JDBC driver to your classpath

Upcoming, you can expect to incorporate the SQLite driver to your classpath. Remember, a JDBC driver is a course that implements the JDBC API for a particular databases.

Go to the GitHub web page for SQLite driver and down load the most recent SQLite .jar. If you are utilizing Maven or Gradle, or something identical, you can increase the driver by means of the Maven repository. Be certain to get the most recent .jar file and retail outlet it someplace you can recall.

The upcoming time you execute your Java system, you will pull in that .jar file by way of the classpath. There are a number of ways to set the classpath. Listing 3 displays how to do it applying a command-line swap.

Listing 3. Executing the SQLite driver on the Java classpath

java.exe -classpath /route-to-driver/sqlite-jdbc-3.23.1.jar:. WhatIsJdbc

Recognize that we’ve set the classpath to level at the driver and the nearby directory this way, Java will however uncover our class file.

Stage 4. Get hold of a databases relationship

The classpath now has entry to the driver. Up coming, modify your simple Java software file to search like the application in Listing 4.

Listing 4. Utilizing the JDBC Relationship course to hook up to SQLite

import java.sql.Relationship
import java.sql.DriverManager
import java.sql.SQLException
import java.sql.ResultSet
import java.sql.Statement

 String sql = "Select id, username FROM end users Wherever id = ?"
    Record end users = new ArrayList<>()
    consider (Link con = DriverManager.getConnection(myConnectionURL)
         PreparedStatement ps = con.prepareStatement(sql)) 
        ps.setInt(1, userId)
        attempt (ResultSet rs = ps.executeQuery()) 
            although(rs.up coming()) 
                users.incorporate(new User(rs.getInt("id"), rs.getString("title")))
     catch (SQLException e) 
    return buyers

class WhatIsJdbc
  general public static void key(String[] args) 
    String url = "jdbc:sqlite:path-to-db/chinook/chinook.db"
    try (Relationship conn = DriverManager.getConnection(url)

      Method.out.println("Got it!")

     capture (SQLException e) 
      throw new Error("Problem", e)

Compile and execute this code. Assuming all goes very well, you will get an affirming information.

Now, we’re prepared for some SQL commands.

Phase 5. Question the databases

With the dwell relationship object in hand, we can do a thing useful, like querying the database. Listing 5 reveals how to question SQLite applying the JDBC Connection and Assertion objects.

Listing 5. Querying the database with JDBC

import java.sql.Link
import java.sql.DriverManager
import java.sql.SQLException
import java.sql.ResultSet
import java.sql.Assertion

class WhatIsJdbc{
  public static void primary(String[] args) {
    String sql = "Pick out id, username FROM people The place id = ?"
    String url = "jdbc:sqlite:path-to-db-file/chinook/chinook.db"
    consider (Relationship conn = DriverManager.getConnection(url)
      Statement stmt = conn.createStatement()) 

        ResultSet rs = stmt.executeQuery("choose * from albums")
        when (rs.next()) 
          String identify = rs.getString("title")
       catch (SQLException e ) 
            toss new Error("Issue", e)

     capture (SQLException e) 
      toss new Error("Challenge", e)

In Listing 5 we use our Link object to get a Statement item: conn.createStatement(). We then use this object to execute an SQL question: stmt.executeQuery(question).

The executeQuery command returns a ResultSet item, which we then use to iterate above the data with even though (rs.subsequent()). In this case in point, you need to see the album titles we’ve queried on as output.

Recognize that we also shut the relationship, by way of a simply call to conn.near().

PreparedStatements, batch updates, and transactions

So significantly, we have lined the fundamental principles of using JDBC to hook up to a database and issue SQL commands. Whilst Assertions and ResultSets do the job effectively for frequent scenarios, you’ll very likely require supplemental choices for greater or more sophisticated applications. The good thing is, the JDBC library carries on evolving to meet most databases obtain requires.