我正在开发Web应用程序以了解SQL Server中的表层次结构。 以下代码显示数据库中存在的所有表的列表。
String dbServer = session.getAttribute("dbServer").toString();
String dbUsername = session.getAttribute("dbUsername").toString();
String dbPassword = session.getAttribute("dbPassword").toString();
String connectionUrl = session.getAttribute("connectionUrl").toString();
String dbName = session.getAttribute("dbName").toString();
out.println("<h2>Database : " + dbName + "</h2>");
Connection con = null;
Statement stmt = null;
ResultSet rs = null;
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
con = DriverManager.getConnection(connectionUrl, dbUsername, dbPassword);
String listAllTablesQuery = "select TABLE_SCHEMA,TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_TYPE='base table' order by TABLE_SCHEMA, TABLE_NAME";
stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
rs = stmt.executeQuery(listAllTablesQuery);
rs.last();
System.out.println("Count : "+rs.getRow());
rs.beforeFirst();
%>
<h3>
List of Tables present in
<%=dbName%>
Database
</h3>
<table border=3>
<tr>
<th>Schema Name</th>
<th>Table Name</th>
</tr>
<%
String tableInfoUrl = "TableInfo.jsp?tableName=";
while (rs.next()) {
out.println("<tr><td>" + rs.getString(1) + "</td><td><a target=_blank href=" + tableInfoUrl
+ rs.getString(2) + "&schemaName=" + rs.getString(1) + ">" + rs.getString(2)
+ "</a></td></tr>");
}
rs = null;
%>
</table>
<%
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (rs != null)
try {
rs.close();
} catch (Exception e) {
}
if (stmt != null)
try {
stmt.close();
} catch (Exception e) {
}
if (con != null)
try {
con.close();
} catch (Exception e) {
}
}
我在结果集中获得了64行,也仅用于dbo架构。但是,如果我在ssms中执行给定的查询,我将获得1701行。如果我们考虑dbo下的表,那么也有1219个表。我不明白为什么结果集中只有64行?
答案 0 :(得分:0)
您用于从Web应用程序连接到DB的用户与您在ssms中使用的用户相同吗?如果不同,请检查用于从Web应用程序连接的用户具有哪些表。
答案 1 :(得分:0)
发生这种情况是因为connectionUrl中没有数据库名称。 现在它按照预期工作。谢谢大家:))