结果集返回的行数少于实际结果

时间:2016-07-29 07:20:27

标签: java sql-server jdbc

我正在开发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行?

2 个答案:

答案 0 :(得分:0)

您用于从Web应用程序连接到DB的用户与您在ssms中使用的用户相同吗?如果不同,请检查用于从Web应用程序连接的用户具有哪些表。

答案 1 :(得分:0)

发生这种情况是因为connectionUrl中没有数据库名称。 现在它按照预期工作。谢谢大家:))