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

时间:2015-10-07 14:22:24

标签: java sql sql-server sql-server-2008 spring-jdbc

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

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)

不能为每个数据库创建新连接。

1 个答案:

答案 0 :(得分:3)

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

您还应该存储已创建的Statement的实例,以便能够正确关闭它:

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

另一个(便携式)选项正在使用Connection.setCatalog() - 但我不是百分百确定微软是否支持