0

我正在使用 sqlite4java 来处理 sqlite db。我现在想将一个表从数据库复制到 dbtest。所以我在stackoverflow上找到了代码。但我总是得到一个错误。首先,我打开与新创建的数据库的连接,然后使用以下命令附加另一个数据库:

ATTACH DATABASE 数据库 AS 数据库;

这工作正常。dbtest 已作为新数据库打开。然后我想复制表:因此,表已经创建并且与其他数据库中的相同。

INSERT INTO dbtest.Routing (id, source, destination, metadata, zone_src, zone_dst,cost) SELECT * FROM database.Routing;

但执行此操作后,我收到错误:

com.almworks.sqlite4java.SQLiteException:[1] DB[1] exec() 没有这样的表:dbtest.Routing

我也使用 sqlite Studio 进行了尝试,它可以正常工作,但我无法在此处附加数据库(这是自动完成的)。我是否必须使用另一种表示法才能使用两个数据库?

编辑:我现在使用 CL 的答案。但这导致了新的问题:

com.almworks.sqlite4java.SQLiteException:[1] DB[1] exec() 没有这样的表:second.Routing

我改变了什么?

ATTACH DATABASE 数据库作为第二个;//数据库文件的新名称,它将作为第二个附加,因为如果我使用调试功能,它会说:数据库第二个已经在使用中。

如果我使用这个命令,我会得到上面提到的错误。

INSERT INTO Routing (id, source, destination, metadata, zone_src, zone_dst,cost) SELECT * FROM second.Routing;

通过使用数据库文件的绝对路径解决了问题。

4

1 回答 1

2

附加数据库的名称不是其文件名,而是您在语句AS子句中指定的名称ATTACH

主数据库(另一个数据库附加到的数据库)的名称也不是它的文件名。它的名字一直是main

要指定主数据库中表的名称,请使用main.Routing,或仅使用Routing


请注意,如果文件尚不存在,SQLite 非常乐意创建新数据库,因此您必须确保为ATTACH语句提供正确的文件名。如果您的数据库文件未命名database或不在当前目录中,则second数据库将为空。强烈建议始终提供完整的文件路径,如下所示:

ATTACH DATABASE '/some/where/whatever.db' AS second;
于 2013-08-28T13:51:29.227 回答