java - 在 jdbc sql server 连接中更改数据库

标签 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.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 的实例,以便能够正确关闭它:

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

另一个(可移植)选项是使用 Connection.setCatalog() - 但我不能 100% 确定 Microsoft 是否支持它

关于java - 在 jdbc sql server 连接中更改数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32994818/

相关文章:

mysql - 元旦12-2按月选择记录

sql - 重命名表列并将其传播到依赖 View

sql-server - 将平面文件导入 SQL Server 表时插入日期

java - 使用接口(interface)将方法应用于 ArrayList

java - 如何使用 "in"从 hibernate 查询中获取非不同结果

mysql - 获取第一个时间戳之间的所有行以及第一个和第二个之间的差异 - MySQL

c# - 对象不能从 DBNull 分配给其他类型

java - 即使保存后共享首选项也无法检索变量

java - 使用字符串选择 Eclipse 工作集

mysql - 选择 max(id) 但需要更多行数据