当前位置: 首页 > 面试题库 >

使用Java创建Access数据库文件(.mdb或.accdb)

叶修永
2023-03-14
问题内容

当前,我有一个应用程序,可以在其中使用JdbcOdbcDriver访问.mdb或.accdb文件以附加一些数据。

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

但是在此,我需要配置系统DSN。我们需要添加新的数据源(Microsoft
Access驱动程序),然后需要提供.mdb文件的位置。只有以上代码才能正常工作。

假设我想在其他系统上运行我的应用程序,那么我需要对该计算机执行相同的操作。如果我将应用程序提供给客户端,而他/她不知道如何配置.mdb文件。然后,我的全部精力都将浪费。因此,可以使用任何驱动程序通过Java代码创建.mdb文件,然后将所有数据附加到.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文件和表时可以工作。


问题答案:

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的原始答案(不建议使用):

如果要通过Java创建“ .mdb”文件,则可以使用Jackcess Java库,该库是用于读取和写入MS
Access数据库的纯Java库之一。我猜目前支持的版本包括2000-2007。请看以下示例,以更好地理解:

  1. 从http://jackcess.sourceforge.net/下载Jackcess Java库(jackcess-1.2.6.jar), 从http://commons.apache.org/logging/download_logging.cgi 和commons 下载commons-logging-1.1.jar。来自http://www.findjar.com/index.x?query=commons-lang的 -lang-2.0.jar
  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();
    }
}


 类似资料:
  • 主要内容:创建空白数据库在本章中,我们将介绍Access创建数据库的基本过程。 本章还将演示如何使用模板创建桌面数据库以及如何从头构建数据库。 注意:本教程使用的是 Access 2016 版本。 要从模板创建数据库,首先需要打开MS Access数据库软件,看到以下屏幕,其中显示不同的Access数据库模板,如下图所示 - 要查看所有可能的数据库,可以向下滚动,也可以使用搜索框。 在搜索框中输入模板或项目 管理名称,然

  • 我在使用文本文件创建SQLite数据库时遇到了问题。我应该创建一个成员列表,其中包含以下内容:(成员)号、名字、姓氏、地址和电话号码(如果有的话)。我正在使用方法创建db,但我似乎无法让它正常工作。 文本文件是这样填充的('...'应该意味着列表中还有其他文件): 正如你可能看到的,一些成员没有电话号码,我认为这是导致db无法填充的原因。我之所以相信这一点,是因为我试图用所有信息制作自己的列表,这

  • 问题内容: 当我尝试使用时会发生异常: 也不显示主键。 问题答案: 对于Access ODBC,我们可以通过pyodbc对象的方法获取“主键”列:

  • 问题内容: 我使用的Java文件数量在不同的ADF项目中很常见,我想将其归档在jar文件中,这样我就可以从任何新项目中导入此归档文件以在项目中使用Java库,我尝试在jdeveloper中创建它,但是没运气。 感谢您的任何建议, 问题答案: 您可以使用以下文章来了解方法。 创建一个Jar文件 但是您仍然可以使用Windows zip实用程序或winzip压缩文件并将其重命名为jar文件。它不是官方

  • 文档:https://eggjs.org/zh-cn/tutorials/sequelize.html sequelize 数据库迁移命令 命令 含义 sequelize db:migrate 运行迁移文件 sequelize db:migrate:status 列出所有迁移的状态 sequelize db:migrate:undo 隔离数据库:迁移:撤消 sequelize db:migrate

  • 最近,我们开始使用Oracle12c数据库,现在我们遇到了文件夹名称中包含特殊字符的问题(例如“š"、”č"、“ot”\“)。虽然创建了文件夹,但没有特殊字符--相反,显示了一些字符组合。例如,使用参数“d:/test/testščé”,创建的文件夹是“testé”。因此,每个特殊字符使用2个字符。 数据库是版本12C(12.1.0.2.0),带有NLS_CHARACTERSET al32utf8