Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java合并两个ms access数据库_Java_Ms Access_Jdbc - Fatal编程技术网

使用java合并两个ms access数据库

使用java合并两个ms access数据库,java,ms-access,jdbc,Java,Ms Access,Jdbc,我正在尝试使用Java合并两个msaccess数据库。我正在从一个数据库和另一个数据库建立连接。我正在将每个表中的所有记录复制到另一个数据库中的表中。 除了将记录从一个数据库表复制到另一个数据库表之外,还有其他解决方案吗。两个数据库都有相同的表结构。是否使用SQL来完成此操作?如果是这样的话,可能是SQL代码的问题,而不是java代码的问题。 您可以对程序执行多线程,以便将每个表或表集复制到不同的线程中。如果表名不发生更改,这将特别有用,因为您可以创建表名数组和将表名放入SQL查询的线程子类。如

我正在尝试使用
Java
合并两个
msaccess
数据库。我正在从一个数据库和另一个数据库建立连接。我正在将每个表中的所有记录复制到另一个数据库中的表中。


除了将记录从一个数据库表复制到另一个数据库表之外,还有其他解决方案吗。两个数据库都有相同的表结构。

是否使用SQL来完成此操作?如果是这样的话,可能是SQL代码的问题,而不是java代码的问题。

您可以对程序执行多线程,以便将每个表或表集复制到不同的线程中。如果表名不发生更改,这将特别有用,因为您可以创建表名数组和将表名放入SQL查询的线程子类。如果您使用的线程池包含10个左右的线程,这应该会加快运行速度,不过要小心,因为我在access和java方面的经验是,数据库很容易损坏,因此在尝试此操作之前,请确保您有备份。

是否使用SQL来执行此操作?如果是这样的话,可能是SQL代码的问题,而不是java代码的问题。

您可以对程序执行多线程,以便将每个表或表集复制到不同的线程中。如果表名不发生更改,这将特别有用,因为您可以创建表名数组和将表名放入SQL查询的线程子类。如果您使用的线程池包含10个左右的线程,这应该会加快速度,不过要小心,因为我在access和java方面的经验是,数据库很容易损坏,所以在尝试此操作之前,请确保您有一个备份。

在大多数情况下,复制关系数据库比简单地复制表要多得多。例如,必须考虑复制数据的顺序,以避免违反完整性。

关于用于复制的SQL,Access将接受外部mdb/acdb的名称作为定义,因此只要没有附件或多值字段数据类型,前两条语句就可以工作。另一个问题是自动编号ID,如果它们可能重叠,则“插入到”是不安全的,因为您可能会得到重复的ID

SELECT * INTO AnotherTest IN 'Z:\Docs\test.accdb'
FROM test;

INSERT INTO AnotherTest IN 'Z:\Docs\test.accdb'
SELECT  *
FROM test;
虽然上面的插入通常有效,但列出字段更安全,省略任何自动编号字段

INSERT INTO AnotherTest ( AText, ADate, ANumber ) IN 'Z:\Docs\test.accdb'
SELECT test.AText, test.ADate, test.ANumber
FROM test;

所有语句都是使用MS Access query design window构建的,只做了一些轻微的修改。

在大多数情况下,复制关系数据库要比简单地复制表多得多。例如,必须考虑复制数据的顺序,以避免违反完整性。

关于用于复制的SQL,Access将接受外部mdb/acdb的名称作为定义,因此只要没有附件或多值字段数据类型,前两条语句就可以工作。另一个问题是自动编号ID,如果它们可能重叠,则“插入到”是不安全的,因为您可能会得到重复的ID

SELECT * INTO AnotherTest IN 'Z:\Docs\test.accdb'
FROM test;

INSERT INTO AnotherTest IN 'Z:\Docs\test.accdb'
SELECT  *
FROM test;
虽然上面的插入通常有效,但列出字段更安全,省略任何自动编号字段

INSERT INTO AnotherTest ( AText, ADate, ANumber ) IN 'Z:\Docs\test.accdb'
SELECT test.AText, test.ADate, test.ANumber
FROM test;

所有的语句都是使用MS Access查询设计窗口构建的,只做了一些轻微的修改。

您说您已经有了一个有效的解决方案。您需要另一个解决方案的原因是什么?这是一个非常冗长的解决方案,因为数据库有大约50个表,所以非常冗长。您说您已经有了一个有效的解决方案。您需要不同解决方案的原因是什么?这是一个非常冗长的解决方案,因为数据库有大约50个表,因此非常冗长。从不同位置合并数据库是否可行sql针对数据库1的连接运行,并引用数据库2。在本例中,数据库2位于Z:\Docs\test.accdb中,因此是的,有两个不同的位置。从不同的位置合并数据库是否有效sql针对数据库1的连接运行,并引用数据库2。在本例中,数据库2位于Z:\Docs\test.accdb中,因此是的,有两个不同的位置。