Java JTDS未连接到正确的数据库

Java JTDS未连接到正确的数据库,java,sql-server,jdbc,jtds,Java,Sql Server,Jdbc,Jtds,我正在使用JTDS连接到MS SQL Server。连接到数据库没有问题,但当我尝试执行一条语句时,我得到一个数据库“java”不存在异常 连接字符串: conn = DriverManager.getConnection("jdbc:jtds:sqlserver://localhost;DatabaseName=MyDatabase;user=testuser;password=testpassword"); 正在尝试执行脚本: private void runStatement(Strin

我正在使用JTDS连接到MS SQL Server。连接到数据库没有问题,但当我尝试执行一条语句时,我得到一个数据库“java”不存在异常

连接字符串:

conn = DriverManager.getConnection("jdbc:jtds:sqlserver://localhost;DatabaseName=MyDatabase;user=testuser;password=testpassword");
正在尝试执行脚本:

private void runStatement(String scriptLocation) {
    if(scriptLocation == null) {
        return;
    }

    try {
        InputStream is = getClass().getClassLoader().getResourceAsStream(scriptLocation);
        String query = is.toString();
        is.close();

        Statement stmt = conn.createStatement();
        stmt.executeQuery(query);
    } catch(IOException | SQLException ex) {
        log.warning(ex.getMessage());
    }
}
堆栈跟踪:

WARNING: Database 'java' does not exist. Make sure that the name is entered correctly.
java.sql.SQLException: Database 'java' does not exist. Make sure that the name is entered correctly.
    at net.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.java:372)
    at net.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken(TdsCore.java:2988)
    at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2421)
    at net.sourceforge.jtds.jdbc.TdsCore.getMoreResults(TdsCore.java:671)
    at net.sourceforge.jtds.jdbc.JtdsStatement.executeSQLQuery(JtdsStatement.java:505)
    at net.sourceforge.jtds.jdbc.JtdsStatement.executeQuery(JtdsStatement.java:1427)
    at com.exampe.MyJTDSConnection.runStatement(MyJTDSConnection.java:238)
    at com.exampe.MyJTDSConnection.loadPageTitle(MyJTDSConnection.java:208)
    at com.exampe.MyJTDSConnection.runTesting(MyJTDSConnection.java:69)
    at com.exampe.SeleniumTesting.runTest(SeleniumTesting.java:59)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    ...

如问题注释中所述,将
.toString()
方法应用于InputStream对象不会读取InputStream。相反,它只返回对象本身的字符串表示,而不是对象包含的内容

例如,我的Java项目有一个名为“script.sql”的资源文件,其中包含:

选择@@VERSION
下面的代码比较了对对象执行
.toString()
与实际将InputStream读入字符串的结果:

包资源测试;
导入java.io.InputStream;
导入org.apache.commons.io.IOUtils;
公共类ResourceTestMain{
公共静态void main(字符串[]args){
try(InputStream=ResourceTestMain.class.getClassLoader().getResourceAsStream(“resources/script.sql”)){
字符串toStringValue=is.toString();
字符串内容=IOUtils.toString(即“UTF-8”);
is.close();
System.out.println(“is.toString()返回:”);
System.out.println(“+toStringValue”);
System.out.println();
System.out.println(“IOUtils.toString(is,\“UTF-8\”)返回:”;
系统输出打印项次(“+内容);
}捕获(例外e){
e、 printStackTrace(系统输出);
}
}
}
结果是:

is.toString()返回:
java.io。BufferedInputStream@804a77
返回的IOUtils.toString(即“UTF-8”):
选择@版本
is.toString()不能提供您认为它能提供的功能。您必须读取输入流才能获取“脚本”。