在 jdbc sql 服务器连接中更改数据库
Changing databases in a jdbc sql server connection
如何更改连接访问的默认数据库?例如,我试图获取 sql 服务器中每个 table 的列表,我连接到:
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% 确定微软是否支持
如何更改连接访问的默认数据库?例如,我试图获取 sql 服务器中每个 table 的列表,我连接到:
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% 确定微软是否支持