Click here to Skip to main content
15,867,835 members
Articles / Programming Languages / Java / Java SE

Access MS-Access Databases from Java

Rate me:
Please Sign up or sign in to vote.
3.78/5 (8 votes)
6 Apr 2009CPOL3 min read 393.1K   13   16
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:

Java
import java.sql.*;

Load the JDBC:ODBC driver

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

Java
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:

Java
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:

Java
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:

Java
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.

C#
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:

Java
/* 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)


Written By
Student Institute of RadioPhysics & Electronics
India India
......

Comments and Discussions

 
Questioni have issue with database Pin
Member 1294517711-Jan-17 3:27
Member 1294517711-Jan-17 3:27 
QuestionAdding values to MS-Access Databases from Java Pin
Member 1044327217-May-14 2:48
Member 1044327217-May-14 2:48 
QuestionProblem with the code above Pin
Gil ad21-Sep-13 9:56
professionalGil ad21-Sep-13 9:56 
QuestionProblem with the conn statment - i am getting this error message Pin
Gil ad21-Sep-13 9:38
professionalGil ad21-Sep-13 9:38 
Questionhi i want small application using servlet program using ms-access database Pin
prasad20261-Jun-13 23:05
prasad20261-Jun-13 23:05 
QuestionAccess MS-Access Databases from Java - Great Post Pin
boss prabu20-Apr-13 1:29
boss prabu20-Apr-13 1:29 
AnswerRe: Access MS-Access Databases from Java - Great Post Pin
prasad20263-Jun-13 0:25
prasad20263-Jun-13 0:25 
Generalaccess Pin
suriyaleka15-Aug-12 21:08
suriyaleka15-Aug-12 21:08 
QuestionAccess MS-Access Databases from Java Pin
chathud22-Feb-12 10:35
chathud22-Feb-12 10:35 
GeneralProblem Pin
husseinx7-Jul-10 6:19
husseinx7-Jul-10 6:19 
GeneralStatement Pin
xs314-Apr-09 21:58
xs314-Apr-09 21:58 
GeneralRe: Statement Pin
arnavguddu16-Apr-09 8:36
professionalarnavguddu16-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.... Pin
arnavguddu14-Apr-09 7:18
professionalarnavguddu14-Apr-09 7:18 
Generaljava drivers Pin
maha_i_haba14-Apr-09 2:20
maha_i_haba14-Apr-09 2:20 
GeneralRe: java drivers Pin
arnavguddu14-Apr-09 7:20
professionalarnavguddu14-Apr-09 7:20 
GeneralMy vote of 1 Pin
rmarkram7-Apr-09 2:09
rmarkram7-Apr-09 2:09 

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

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