Click here to Skip to main content
Click here to Skip to main content

Access MS-Access Databases from Java

, 6 Apr 2009
Rate this:
Please Sign up or sign in to vote.
This article demostrates how to access MS Access databases from Java.

Introduction

This article explains how to use the JDBC ODBC bridge to access an MS-Access database from Java applications. Instead of elaborating on the basics of the database, let's get down to the subject.

ODBC driver

In Java, we require a driver to be loaded at runtime to connect to any data source. The same is the case for ODBC data sources too. The driver is implemented as a class that is located and loaded at runtime. The ODBC driver for JDBC connections is named sun.java.odbc.JdbcOdbcDriver.

ODBC connection string

As in Visual C++, we require an ODBC connection string to connect to the data source. Consider for example, that we are writing a VC++ program that connects to an Access database file named myDB.mdb present in the application directory. We would use an ODBC connection string as follows:

"Driver={Microsoft Access Driver (*.mdb)};DBQ=myDB.mdb;"

In Java, we would write a similar connection string, but there would be an additional specification that points to the driver that will be required for the connection, that is, jdbc:odbc:. Then, follow it up with the connection string. So the connection string in Java becomes:

"jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)}; DBQ=myDB.mdb;"

Thus, to generalize the above, to be able to connect with an ODBC DSN, we require a connection string of the form:

"jdbc:odbc:ODBC DSN String"

Import the classes to connect to the database

The package containing the database related classes is contained in java.sql. So, we do the import as follows:

import java.sql.*;

Load the JDBC:ODBC driver

Dynamically load the class sun.java.odbc.JdbcOdbcDriver as follows:

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

Open the MS-Access database file in the application space

To do this, we use the ODBC DSN as specified above:

String database = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=myDB.mdb;";
Connection conn = DriverManager.getConnection(database, "", "");

Create a Statement object to execute the SQL query

The Statement must be created to execute a SQL query on the opened database. It is done with the following code:

Statement s = conn.createStatement();

Cleanup after finishing the job

To clean up after we are done with the SQL query, we call s.close() to dispose the object Statement. Then, before we end our program or after the point where we decide that the database is not required any more, we close the database with a call to conn.close(). The following code does the cleanup after we are done:

s.close();  // Close the statement
conn.close(); // Close the database. Its no more required

Execute a SQL statement on a valid Statement object

Call s.execute("SQL statement") when you require to execute a SQL query. It returns the number of rows effected by the query. If the last query holds a ResultSet to be returned which generally occurs with SELECT ... type queries, then call s.getResultSet() which returns the ResultSet object. The following code shows how to use a SELECT query and display the value contained in the first two columns of the table.

String selTable = "SELECT * FROM SOMETABLE";
s.execute(selTable);
ResultSet rs = s.getResultSet();
while((rs!=null) && (rs.next()))
{
   System.out.println(rs.getString(1) + " : " + rs.getString(2));
}

That's all. Let us now see a demo app that clarifies all that I have written above.

An example application

The following application does the following:

  1. Loads the JDBC ODBC driver.
  2. Opens a ODBC data source which opens the file myDB.mdb present in the application working directory.
  3. Gets the Statement object for SQL execution.
  4. Generates the name of a table with a random number generator.
  5. Creates the table.
  6. Enters 25 random entries into it.
  7. Displays the content of the table.
  8. Deletes or drops the table created.
  9. Closes the Statement object and then closes the connection to the database.

Here is the required code:

/* Program:
 *   Setup database driver manager to understand and use ODBC MS-ACCESS data source.
 * Written by Arnav Mukhopadhyay (ARNAV.MUKHOPADHYAY@smude.edu.in)
 * Compile as: javac dbAccess.java
 */

import java.sql.*;

public class dbAccess
{
    public static void main(String[] args)
    {
        try
        {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            String database = 
              "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=myDB.mdb;";
            Connection conn = DriverManager.getConnection(database, "", "");
            Statement s = conn.createStatement();
            
            // create a table
            String tableName = "myTable" + String.valueOf((int)(Math.random() * 1000.0));
            String createTable = "CREATE TABLE " + tableName + 
                                 " (id Integer, name Text(32))";
            s.execute(createTable); 
            
            // enter value into table
            for(int i=0; i<25; i++)
            {
              String addRow = "INSERT INTO " + tableName + " VALUES ( " + 
                     String.valueOf((int) (Math.random() * 32767)) + ", 'Text Value " + 
                     String.valueOf(Math.random()) + "')";
              s.execute(addRow);
            }
            
            // Fetch table
            String selTable = "SELECT * FROM " + tableName;
            s.execute(selTable);
            ResultSet rs = s.getResultSet();
            while((rs!=null) && (rs.next()))
            {
                System.out.println(rs.getString(1) + " : " + rs.getString(2));
            }
            
            // drop the table
            String dropTable = "DROP TABLE " + tableName;
            s.execute(dropTable);
            
            // close and cleanup
            s.close();
            conn.close();
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
        }
    }
}

That's all I have!

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

arnavguddu
Other Student
India India
http://gudduarnav.eu5.org/

Comments and Discussions

 
QuestionAdding values to MS-Access Databases from Java PinmemberMember 1044327217-May-14 2:48 
QuestionProblem with the code above PinprofessionalGil ad21-Sep-13 9:56 
QuestionProblem with the conn statment - i am getting this error message PinmemberMember 1028897921-Sep-13 9:38 
Questionhi i want small application using servlet program using ms-access database Pinmemberprasad20261-Jun-13 23:05 
QuestionAccess MS-Access Databases from Java - Great Post Pinmemberboss prabu20-Apr-13 1:29 
AnswerRe: Access MS-Access Databases from Java - Great Post Pinmemberprasad20263-Jun-13 0:25 
Generalaccess Pinmembersuriyaleka15-Aug-12 21:08 
QuestionAccess MS-Access Databases from Java Pinmemberchathud22-Feb-12 10:35 
GeneralProblem Pinmemberhusseinx7-Jul-10 6:19 
GeneralStatement Pinmemberxs314-Apr-09 21:58 
GeneralRe: Statement Pinmemberarnavguddu16-Apr-09 8:36 
GeneralThe Code in the above article was updated as s.close() and conn.close would have never been reached if an exception was thrown before that code part is reached.... Pinmemberarnavguddu14-Apr-09 7:18 
Generaljava drivers Pinmembermaha_i_haba14-Apr-09 2:20 
GeneralRe: java drivers Pinmemberarnavguddu14-Apr-09 7:20 
GeneralMy vote of 1 Pinmemberrmarkram7-Apr-09 2:09 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Mobile
Web03 | 2.8.140721.1 | Last Updated 6 Apr 2009
Article Copyright 2009 by arnavguddu
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid