从Java在SQLite中附加DB

从Java在SQLite中附加DB,java,sql,sqlite,Java,Sql,Sqlite,在升级到Java7之前,我将sqlitedsb附加到另一个sqlitedsb的代码运行良好(我猜) 如何创建从java附加数据库的语法?我的语法在使用SQL工具时运行良好,但在JAVA中我没有成功 我的代码: import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; public class TesteAttachDB {

在升级到Java7之前,我将sqlitedsb附加到另一个sqlitedsb的代码运行良好(我猜) 如何创建从java附加数据库的语法?我的语法在使用SQL工具时运行良好,但在JAVA中我没有成功

我的代码:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class TesteAttachDB {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        testattach();
    }

    public static void testattach(){

        Connection connection_historymapsdb = null;
        String sTargetDB="C://temp//historydb11_maps_en.db";
        try {
            Class.forName("org.sqlite.JDBC");
                connection_historymapsdb = DriverManager.getConnection("jdbc:sqlite:" + sTargetDB);
        } catch (ClassNotFoundException e1) {
            e1.printStackTrace();
        } catch (SQLException e2) {
            e2.printStackTrace();
        }
        Statement statement;
        try {
            //String sDatabasetoattach="C://temp//test.db";
            //String sDatabasetoattach="C:/temp/test.db";
            String sDatabasetoattach="C:\temp\test.db";
            //String sDatabasetoattach="C:\temp\\userdb\test.db";
            statement = connection_historymapsdb.createStatement();
            String sSQL="Attach '" + sDatabasetoattach + "' as chronica_maps_tests";
            System.out.println(sSQL);
            statement.execute(sSQL);
            String sTestSQL="select count(*) from chronica_maps_tests.testtable";
            statement.execute(sTestSQL);
            System.out.println("worked.");
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
错误消息:

A:

B:

C:


我为sSQL尝试了不同的语法(A、B、C),但没有任何效果。SQL字符串应该是怎样的?

在Java字符串中,
\
是一个转义字符。
\t
是水平选项卡控制字符,如消息中所示:

附加'C:emp est.db'作为计时地图\u测试
正确的语法如下所示:

String sDatabasetoattach = "C:\\temp\\test.db";

我为SQLite添加了一个较新的JDBC驱动程序,它成功了。我猜这个驱动程序在Java7中不能正常工作。我的旧JDBC驱动程序是从2011年开始的。

您有特权吗?请尝试其他驱动器。是的,我有访问权限。已经试过了。这不是问题。您使用的是单引号('),尝试在文件名周围使用双引号(“)(答案中也显示了)。甚至“C:\\temp\\test.db”(在Java代码中转义)也会起作用?不起作用。我对所有变体都使用了双引号。我刚刚重新加载了我的旧虚拟机,在那里我开始了相同的代码”C://temp//test.db“而且它起作用了!与此同时,我更新了Java7,我想这就是它不再工作的原因。我没有改变密码。我从我的旧虚拟机上复制了相同的代码,它在那里工作,而在我的新虚拟机上它不工作?谢谢,但我也看到了。这只是为了表明,我尝试了各种语法。我刚刚重新加载了我的旧VirtualMachine,在那里我用“C://temp//test.db”启动了相同的代码,它工作了!与此同时,我更新了Java7,我想这就是它不再工作的原因。我没有改变密码。我从我的旧虚拟机复制了相同的代码,它在那里工作,而在我的新虚拟机中它不工作?
Attach 'C:/temp/test.db' as chronica_maps_tests
java.sql.SQLException: unable to open database: C:/temp/test.db
    at org.sqlite.DB.execute(DB.java:275)
    at org.sqlite.Stmt.exec(Stmt.java:56)
    at org.sqlite.Stmt.execute(Stmt.java:83)
    at maps.TesteAttachDB.testattach(TesteAttachDB.java:48)
    at maps.TesteAttachDB.main(TesteAttachDB.java:15)
Attach 'C:  emp est.db' as chronica_maps_tests
java.sql.SQLException: no such table: chronica_maps_tests.testtable
hat funktioniert !
    at org.sqlite.DB.throwex(DB.java:288)
    at org.sqlite.NestedDB.prepare(NestedDB.java:115)
    at org.sqlite.DB.prepare(DB.java:114)
    at org.sqlite.Stmt.execute(Stmt.java:82)
    at maps.TesteAttachDB.testattach(TesteAttachDB.java:52)
    at maps.TesteAttachDB.main(TesteAttachDB.java:15)
String sDatabasetoattach = "C:\\temp\\test.db";