bmck2006
bmck2006

Reputation: 122

Best way to connect java swing app to ms access db on a shareserver?

Currently im developing a java swing application that I'd like to serve as the GUI for CRUD operations on a MS access database. Currently, everyone on the team that will be using this application updates a spreadsheet on a shareserver. They'd like to switch over to a UI that better suits their purposes, and transition the spreadsheet to a database.

I'm planning on putting an executable jar and the ms access database file on the shareserver. This is where the jar will be accessed.

I don't want users to have to be messing with ODBC settings. Is there a library that can help with this?

UPDATE: Shailendrasingh Patil's suggestion below worked best for me. This took me a little bit of research and the setup was a bit confusing. But I eventually got everything working the way I was hoping. I used Gradle to pull in the necessary dependencies to use UcanAccess.

The following is a snippet from my DatabaseController class:

import javax.swing.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class DatabaseController {

    public DatabaseController() {}

    public void addOperation(String date, String email, String subject, String body) {
    try{
        Connection con = DriverManager.getConnection("jdbc:ucanaccess://C:\\Users\\user\\Desktop\\TestDatabase.accdb;jackcessOpener=CryptCodecOpener","user", "password");

        String sql = "INSERT INTO Email (Date_Received, Email_Address, Subject, Message) Values " +
                "('"+date+"'," +
                "'"+email+"'," +
                "'"+subject+"'," +
                "'"+body+"')";

        Statement statement = con.createStatement();
        statement.execute(sql);
    }
    catch (Exception e) {
        JOptionPane.showMessageDialog(null, e.getMessage(),"Error",
                JOptionPane.ERROR_MESSAGE);
        e.printStackTrace();
    }
}
}

The following class is also required:

import java.io.File;
import java.io.IOException;
import com.healthmarketscience.jackcess.CryptCodecProvider;
import com.healthmarketscience.jackcess.Database;
import com.healthmarketscience.jackcess.DatabaseBuilder;
import net.ucanaccess.jdbc.JackcessOpenerInterface;

public class CryptCodecOpener implements JackcessOpenerInterface {
public Database open(File fl,String pwd) throws IOException {
    DatabaseBuilder dbd =new DatabaseBuilder(fl);
    dbd.setAutoSync(false);
    dbd.setCodecProvider(new CryptCodecProvider(pwd));
    dbd.setReadOnly(false);
    return dbd.open();
}
}

I apologize for the bad indentations.

Upvotes: 0

Views: 957

Answers (1)

Shailendrasingh Patil
Shailendrasingh Patil

Reputation: 384

You should use UCanAccess drivers to connect to MS-Access. It is a pure JDBC based and you don't need ODBC drivers. Refer examples here

Upvotes: 1

Related Questions