Создайте файл базы данных Access (.mdb или .accdb), используя Java - PullRequest
5 голосов
/ 03 марта 2012

В настоящее время у меня есть одно приложение, в котором я могу получить доступ к .mdb или .accdb файл с JdbcOdbcDriver для добавления некоторых данных.

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        con = DriverManager.getConnection("jdbc:odbc:MsAccessDSN");

но в этом мне нужно настроить DSN системы. Нам нужно добавить новый источник данных (драйвер Microsoft Access), а затем указать местоположение файла .mdb. Только тогда приведенный выше код будет работать.

Предположим, я хочу запустить свое приложение в другой системе, а затем сделать то же самое с этим компьютером. Если я передаю свое заявление клиенту, и он / она не знает, как настроить файл .mdb. Тогда все мои усилия будут напрасными. Таким образом, доступен любой драйвер, с помощью которого я создаю файл .mdb с помощью своего кода Java, а затем добавляю все данные в таблицу файла .mdb. Или есть другой способ, где код Java может создать файл .mdb и получить доступ к этому файлу базы данных.

Я попробовал этот код, который добавляет данные без настройки системного DNS:

public class TestMsAccess {

private static Connection con;
private static Statement stm;
private static String tableName = "EmpDetail";
private static int id_is = 2;
private static String name_is = "Employee1";

public static void main(String[] args) throws ClassNotFoundException, SQLException {
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    con = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=D:\\MSAccessProject/Employee.mdb", "", "");

    stm = con.createStatement();
    // enter value into table
     String addRow = "INSERT INTO " + tableName  + " VALUES ( "
        + id_is + ", '" 
        + name_is + "')";
     stm.execute(addRow);

     if (con != null) { con.close(); }
     if (stm != null) { stm.close(); }
}

}

Но проблема в том, что этот код не создает файл .mdb автоматически, а работает, когда я создаю файл и таблицу .mbd перед запуском этого кода.

Ответы [ 5 ]

15 голосов
/ 03 марта 2012

Обновление для Jackcess 2.x: базы данных теперь создаются (или открываются) с использованием DatabaseBuilder, поэтому для создания нового файла базы данных мы делаем

import java.io.File;
import java.io.IOException;

import com.healthmarketscience.jackcess.Database;
import com.healthmarketscience.jackcess.Database.FileFormat;
import com.healthmarketscience.jackcess.DatabaseBuilder;

public class JackcessDemoMain {

    public static void main(String[] args) {
        String dbPath = "C:/Users/Public/newDb.accdb";
        // using try-with-resources is recommended to ensure that 
        //   the Database object will be closed properly
        try (Database db = DatabaseBuilder.create(FileFormat.V2010, new File(dbPath))) {
            System.out.println("The database file has been created.");
        } catch (IOException ioe) {
            ioe.printStackTrace(System.err);
        }

    }

}

Оригинальный ответ для Jackcess 1.x (устарело):

Если вы хотите создать файл «.mdb» через java, вы можете использовать библиотеку Java от Jackcess, которая является одной из библиотек Java для чтения и записи в базы данных MS Access. В настоящее время поддерживаемые версии включают 2000-2007, я думаю. Пожалуйста, посмотрите на приведенный ниже пример для лучшего понимания:

  1. Загрузить библиотеку Java от Jackcess (jackcess-1.2.6.jar) от http://jackcess.sourceforge.net/ и commons-logging-1.1.jar от http://commons.apache.org/logging/download_logging.cgi и commons-lang-2.0.jar от http://www.findjar.com/index.x?query=commons-lang
  2. Добавьте обе банки в ваш путь к классам.
  3. Попробуйте следующий код для автоматического создания базы данных:

package com.jackcess.lib;


import com.healthmarketscience.jackcess.ColumnBuilder;
import com.healthmarketscience.jackcess.Database;
import com.healthmarketscience.jackcess.Table;
import com.healthmarketscience.jackcess.TableBuilder;
import java.io.File;
import java.io.IOException;
import java.sql.SQLException;
import java.sql.Types;

/**
 *
 * @author sarath_ivan
 */
public class JackcessLibrary {

    private static Database createDatabase(String databaseName) throws IOException {
        return Database.create(new File(databaseName));
    }

    private static TableBuilder createTable(String tableName) {
        return new TableBuilder(tableName);
    }

    public static void addColumn(Database database, TableBuilder tableName, String columnName, Types sqlType) throws SQLException, IOException {
        tableName.addColumn(new ColumnBuilder(columnName).setSQLType(Types.INTEGER).toColumn()).toTable(database);
    }

    public static void startDatabaseProcess() throws IOException, SQLException {
        String databaseName = "C:/Users/compaq/Desktop/employeedb.mdb"; // Creating an MS Access database
        Database database = createDatabase(databaseName);

        String tableName = "Employee"; // Creating table
        Table table = createTable(tableName)
                .addColumn(new ColumnBuilder("Emp_Id").setSQLType(Types.INTEGER).toColumn())
                .addColumn(new ColumnBuilder("Emp_Name").setSQLType(Types.VARCHAR).toColumn())
                .addColumn(new ColumnBuilder("Emp_Employer").setSQLType(Types.VARCHAR).toColumn())
                .toTable(database);

        table.addRow(122875, "Sarath Kumar Sivan","Infosys Limited.");//Inserting values into the table
    }

    public static void main(String[] args) throws IOException, SQLException {
        JackcessLibrary.startDatabaseProcess();
    }
}
3 голосов
/ 10 октября 2014

Теперь, когда мост JDBC-ODBC был удален из Java (начиная с Java 8), будущие читатели могут быть заинтересованы в UCanAccess , бесплатном драйвере JDBC на Java с открытым исходным кодом для баз данных Access. UCanAccess включает параметр соединения newdatabaseversion, который создаст файл Access .accdb или .mdb, если он еще не существует.

Пример кода:

String dbFileSpec = "C:/Users/Gord/Desktop/myDb.accdb";
try (Connection conn = DriverManager.getConnection(
        "jdbc:ucanaccess://" + dbFileSpec + 
        ";newdatabaseversion=V2010")) {
    DatabaseMetaData dmd = conn.getMetaData();
    try (ResultSet rs = dmd.getTables(null, null, "Clients", new String[] { "TABLE" })) {
        if (rs.next()) {
            System.out.println("Table [Clients] already exists.");
        } else {
            System.out.println("Table [Clients] does not exist.");
            try (Statement s = conn.createStatement()) {
                s.executeUpdate("CREATE TABLE Clients (ID COUNTER PRIMARY KEY, LastName TEXT(100))");
                System.out.println("Table [Clients] created.");
            }
        }
    }
    conn.close();
}

Подробнее о настройке UCanAccess см.

Управление базой данных Access из Java без ODBC

1 голос
/ 25 ноября 2014

загрузить библиотеку jackcess

использовать эту библиотеку, которая создаст файл .mdb. Ниже приведен код библиотеки загрузок фрагментов кода из указанного выше места.добавить требуемый файл JAR в путь к классу.

`

import java.io.File;
import java.io.IOException;
import java.sql.SQLException;
import java.sql.Types;

import com.healthmarketscience.jackcess.ColumnBuilder;
import com.healthmarketscience.jackcess.Database;
import com.healthmarketscience.jackcess.DatabaseBuilder;
import com.healthmarketscience.jackcess.Table;
import com.healthmarketscience.jackcess.TableBuilder;

public class MDBFileGenerator {
    public static void main(String[] args) throws IOException, SQLException {
        Database db = DatabaseBuilder.create(Database.FileFormat.V2000,
                new File("new.mdb"));
        Table newTable = new TableBuilder("NewTable")
                .addColumn(new ColumnBuilder("a").setSQLType(Types.INTEGER))
                .addColumn(new ColumnBuilder("b").setSQLType(Types.VARCHAR))
                .toTable(db);
        newTable.addRow(1, "foo");
    }
}

`

1 голос
/ 03 марта 2012

Вы можете использовать приведенный ниже метод вместо настройки System DSN на вашем компьютере.

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
connection = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=C:/Users/Desktop/your-database-file.mdb", "", "");

Здесь "your-database-file.mdb" - это ваш файл MS-Access.Вы можете указать полный путь к файлу базы данных в вашем коде, чтобы установить соединение.Вы также можете сохранить файл базы данных в папке вашего проекта (приложения).В этом случае вы сможете передать файл своей базы данных вместе с приложением клиенту, и он / она сможет использовать ваше приложение без необходимости настройки DSN.

Надеюсь, что это соответствует вашим целям!Спасибо тебе!

0 голосов
/ 03 марта 2012

Похоже, что есть хотя бы одна опция для прямого подключения к .mdb без JdbcOdbcDriver, эта опция коммерческая. См. Здесь. Если вы пытаетесь избежать настройки, рассматривали ли вы возможность использования встроенной базы данных, например sqlite ?

...