Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 更改jdbc sql server连接中的数据库_Java_Sql_Sql Server_Sql Server 2008_Spring Jdbc - Fatal编程技术网

Java 更改jdbc sql server连接中的数据库

Java 更改jdbc sql server连接中的数据库,java,sql,sql-server,sql-server-2008,spring-jdbc,Java,Sql,Sql Server,Sql Server 2008,Spring Jdbc,如何更改连接访问的默认数据库?例如,我试图获取我连接到的sql server中每个表的列表: List list = new ArrayList(); for (String db: dbList) { conn.prepareStatement("use ["+db+"]").executeQuery();//THIS LINE ISNT WORKING D: DatabaseMetaData md = conn.getMetaData(); rs = md.getTa

如何更改连接访问的默认数据库?例如,我试图获取我连接到的sql server中每个表的列表:

List list = new ArrayList();
for (String db: dbList) {
    conn.prepareStatement("use ["+db+"]").executeQuery();//THIS LINE ISNT WORKING D:
    DatabaseMetaData md = conn.getMetaData();
    rs = md.getTables(null, null, "%", null);
    while (rs.next())
        list.add(rs.getString(3));
}
return list;
不起作用的行抛出此错误:

com.microsoft.sqlserver.jdbc.SQLServerException: The statement did not return a result set.
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:171)
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:394)
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:340)
    at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4575)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1400)
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:179)
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:154)
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeQuery(SQLServerPreparedStatement.java:283)

为每个数据库创建新连接不是一个选项。

您不能使用
executeQuery()
为此,您需要使用
execute()
(错误消息为您提供了一个很好的提示)。在这里使用
PreparedStatement
也没有意义

您还应该存储所创建的
语句的实例
,以便能够正确地关闭它:

Statement stmt = conn.createStatement();
stmt.execute("use [" + db + "]");
stmt.close();

另一个(可移植的)选项是使用
Connection.setCatalog()
,但我不能100%确定微软是否支持这一点

一切都很完美。谢谢:DI可以确认
setCatalog
mssql-jdbc-6.2.2.jre8.jar
和SQL Server 2008一起使用。