Вы находитесь на странице: 1из 4

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:
Collapse | Copy Code
"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:
Collapse | Copy Code
"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:
Collapse | Copy Code
"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:
Collapse | Copy Code
import java.sql.*;

Load the JDBC:ODBC driver


Dynamically load the class sun.java.odbc.JdbcOdbcDriver as follows:
Collapse | Copy Code
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:
Collapse | Copy Code
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:
Collapse | Copy 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:
Collapse | Copy Code
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.
Collapse | Copy Code
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:
Collapse | Copy 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!

Вам также может понравиться