- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
目前我有一个可以 Access .mdb 或 .accdb 的应用程序 使用 JdbcOdbcDriver 文件附加一些数据。
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con = DriverManager.getConnection("jdbc:odbc:MsAccessDSN");
但在此,我需要配置系统DSN。我们需要添加新的数据源(Microsoft Access 驱动程序),然后需要提供 .mdb 文件的位置。只有这样上面的代码才能工作。
假设我想在其他系统上运行我的应用程序,然后我需要对该计算机执行相同的操作。如果我将我的应用程序提供给客户,而他/她不知道如何配置 .mdb 文件。那么我所有的努力都会白费。所以任何驱动程序都可用,我可以通过我的 Java 代码创建 .mdb 文件,然后将所有数据附加到 .mdb 文件的表中。或者是否有任何其他方式,Java 代码可以创建 .mdb 文件并能够 Access 该数据库文件。
我试过这段代码,它在不配置系统 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。请查看以下示例以便更好地理解:
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();
}
}
关于java - 使用 Java 创建 Access 数据库文件(.mdb 或 .accdb),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9543722/
我想得到专家的建议,我试图找到解决问题的方法,很遗憾没有找到。我正在使用以下内容 对比 2010 .NET 4.0 Windows 窗体 OLEDB, .mdb 用于存储数据库 我已经制作了 Wind
我们开发了一个合并函数,它将被其他进程使用,并希望将该函数定位在其自己的 MDB(称为“远程”)中,以便在需要时可以从“caller.mdb”中引用和调用它。该函数旨在返回一个数组,并且在从“远程”中
我正在用 C# 创建一个窗口应用程序,并考虑在 MS-Access 的 mdb 文件上设置一个密码,这样除了我的窗口应用程序或谁知道该文件的密码之外,没有人可以打开该文件。 我设法使该文件受到密码保护
我正在尝试从一个 Access 数据库文件中获取表格,将它们添加到另一个结构完全相同但信息不同的 Access 数据库文件中。我需要覆盖任何现有的表。我几乎完成了我的项目,这是我最后的砖墙。 我正在使
Access .MDB 文件有大小上限吗?例如,连接到超过 1GB 的 .MDB 文件的应用程序会出现问题吗? 超过 1GB 的 MDB 文件存在哪些问题/风险以及可以采取哪些措施? 最佳答案 是的。
最近我遇到了我创建的 C# 程序抛出异常 Could not find file C:\windows\system32\qbcdb.mdb 的问题。这很奇怪,因为我以前在通过 Advanced In
我有一个非常旧的 Access 97 应用程序,需要进行现代化改造。我想做一些更现代的东西,但是将整个应用程序重写为真正的 winapp(或 webapp)可能会有点贵。所以现在的想法是升级到 Acc
我目前正在开发一个在 GlassFish 上运行的基于 EJB 3.1 的项目,该项目使用自定义构建的框架来配置任何 SessionBeans 的功能。使用它,我们可以在运行时启用、禁用和重新配置大多
当我运行mdb-export时,该程序将以逗号分隔的表转储到终端,但据我所知,并没有创建csv文件。 mdb-export是在某处创建csv文件还是此转储具有其预期功能?如果是后者,那么如何将输出输出
我有一个使用容器管理事务的 MDB(我的容器是 IBM Websphere 7)。 Websphere 正在使用全局 (JTA) 事务。 如果我的 MDB 线程启动一个工作线程,并且该线程开始一个事务
我们有一个应用程序,它读取 JMS 并执行一些数据库事务,所有这些都是 XA 事务的一部分。如果我们发现消息有问题,我们想要回滚数据库,但我们不希望 JMS 回滚让我们再次读取消息(如果先前已启动回滚
我有一个处理不同类型消息(对象消息)的 MDB。我想跟踪 MDB 收到的消息数量,并统计收到的消息的类型。 虽然我的 MDB 分布在多个 JVM 上,但我可以很好地跟踪各个 JVM 上的计数。 在 E
我有一个现有的网络项目。现在我收到添加 MDB EJB 项目的要求并执行了相同的操作。 EJB项目maven依赖web项目 所以到目前为止一切都很好。当我开始在我的 MDB 中使用 Web 项目中的一
我们可以控制 MDB 中的事务重试间隔吗?如果是这样,请提供示例或指导我查看文档。我们要为 MDB 事务设置 3 分钟的时间间隔。期望是,如果查询第一次失败,则它会在 3 分钟后重试。 最佳答案 维拉
我在独立环境中使用 Spring3.1。 我用 jms 模板设置主题是这样的: /topic/mm1sessionsTopic 对于本主题,我通过以下方式设置
有没有办法加快插入 mdb 的速度? using (StreamReader sr = new StreamReader(_localDir + "\\" + _filename)) while
我在我的应用程序中使用 EJB MDB 3.0 和 WAS 7 服务器。我有 7 个 MDB,因此在 WAS 服务器上创建了 7 个队列和 7 个激活规范。我已将所有 7 个激活规范 maxPoolD
我们实现了 MDB,它可以并行处理用户输入和处理。我们对用户数据进行限制检查(例如用户可以拥有的电话号码数量)。 我面临的问题是两个不同的线程获取相同用户的数据并进行处理。第一个线程很好,它检查限制并
我当前的生产 MDB 运行在版本 WAS 6.1 的 AS/400 上。 QA 环境没有为 MDB 设置,所以我正在设置,我在消息队列中插入一条消息并设置 MDB 以获取消息并处理消息,但 MDB L
我正在使用 JBOSS 5.1.2 MDB 来使用放置在队列上的实体消息。消息生产者可以为同一实体产生多条消息。这些消息实体由它们的实体号定义。 (msg_entity_no) 仅当实体不存在时,我才
我是一名优秀的程序员,十分优秀!