sqlite4java通过附加另一个数据库没有这样的表错误

时间:2013-08-28 13:16:28

标签: java database sqlite

我正在使用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数据库AS第二; //数据库文件的新名称,它将作为第二个附加,因为如果我使用调试函数,它说:数据库第二个已经在使用。

如果我使用此命令,我会收到上述错误。

  

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

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

1 个答案:

答案 0 :(得分:1)

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

主数据库(附加了其他数据库的数据库)的名称也不是其文件名。它的名字总是main

要在主数据库中指定表的名称,请使用main.RoutingRouting


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

ATTACH DATABASE '/some/where/whatever.db' AS second;