在Java中附加Sqlite数据库

3
我有一个问题,想要将数据库附加并将所有行从已附加的数据库插入到主数据库中。
以下是我的代码。
public void selectOldDb(String dbName) throws Exception {
    createNewDB();
    Class.forName("org.sqlite.JDBC");

    Connection connOldDb = DriverManager.getConnection("jdbc:sqlite:"+ dbName);
    String newDbName = getDirToNewDb();

    newDbName = newDbName + "auftraege.db";
    Connection connNewDb = DriverManager.getConnection("jdbc:sqlite:"+ newDbName);

    connNewDb.prepareStatement("ATTACH DATABASE \"" + connOldDb + "\" AS  fromDB").execute();

    connNewDb.prepareStatement("INSERT INTO main.auftraege  SELECT * FROM fromDB.SendeDS").execute();

    connNewDb.close();
    connOldDb.close();
}

我尝试插入数据时出现了以下错误:

[SQLITE_ERROR] SQL 错误或缺失数据库(没有这张表:fromDB.SendeDS)

我做错了什么?


我看到两种可能性: 1) 表不存在,您需要创建它,2) 您的数据库或表名称有拼写错误。 - Code-Apprentice
谢谢你的回答。表已经存在了。我已经用连接后的结果集进行了测试。但是你说的typo是什么意思? - user1761808
打字错误是指您应该仔细检查SendeDS是否确实是您要查询的表的名称。由于我是以英语为母语的人,我认为您可能想要使用SendDSSenderDS。当您知道应该是什么时,这样的拼写错误很容易被忽视。我只是建议您再次检查一下。 - Code-Apprentice
1个回答

4
< p > ATTACH DATABASE 命令需要一个文件名,但您给它了一个Connection对象的表示。

您不需要使用connOldDb,只需使用dbName即可。


非常感谢。这很容易,并且运行良好。这是我的新代码:connNewDb.prepareStatement( "ATTACH DATABASE '" + dbName + "' AS fromDB").execute(); - user1761808
你是否需要打开旧数据库的连接? - Tacitus86
@Tacitus86,引用答案中的话,“你不需要connOldDb”。 - CL.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接