Java Web程序开发范例宝典
上QQ阅读APP看书,第一时间看更新

4.10 枚举数据库中的数据表

当创建查询功能或是修改指定数据表的数据结构时都会用到枚举数据库中的数据表。列举数据表是经常使用的数据库操作。

实例105 列举SQL Server数据库中的数据表

本实例是一个提高效率、人性化的程序

实例位置:光盘\mingrisoft\04\105

实例说明

在程序开发时,有时需要创建大量的数据表。如果通过SQL查看会很不方便,为了快速方便地查看数据库中的数据表,可以将数据库中的数据表显示出来。只要修改数据库的名称即可很方便地看到指定数据库中的所有数据表,如图4.69所示。

图4.69 列举SQL Server数据库中的数据表

技术要点

本实例使用SQL语句对SQL Server系统表Sysobjects进行查找。该表中的字段说明如下。

● name:Sysname对象名。

● Id:int对象标识号。

● Xtype:char(2)类型的对象类型,可以是表4.1中对象类型的一种。

表4.1 Xtype的对象类型

实现过程

(1)创建UserDao类,定义连接、查询和关闭数据库的方法。关键代码如下:

            public class UserDao{
                String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=db_database04";
                String username="sa";
                String password="";
                private Connection con=null;
                private Statement stmt=null;
                private ResultSet rs=null;
                public UserDao(){                                         //通过构造方法加载数据库驱动
                try {
                        Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
                } catch (Exception ex) {
                        System.out.println("数据库加载失败");
                }
                }
                public boolean Connection(){                                    //创建数据库连接
                try {
                        con=DriverManager.getConnection(url,username,password);
                } catch (SQLException e) {
                        System.out.println(e.getMessage());
                        System.out.println("creatConnectionError!");
                }
                return true;
                }
            public ResultSet selectStatic(String sql)throws SQLException{         //对数据库的查询操作
                ResultSet rs=null;
                if (con == null) {
                    Connection();
                }
                        try {
                stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
                rs = stmt.executeQuery(sql);
                } catch (SQLException e) {
                          e.printStackTrace();
                            }
                closeConnection();
                return rs;
            }
                public void closeConnection(){                                  //关闭数据库
                if (con != null && stmt != null && rs != null) {
                        try{
                        rs.close();
                        stmt.close();
                        con.close();
                        }catch(SQLException e){
                        e.printStackTrace();
                        System.out.println("Failed to close connection!");
                        }finally{
                        con = null;
                    }
                }
            }
        }

(2)创建index.jsp页面,通过JavaBean标签调用数据库操作类UserDao,编写SQL语句并执行selectStatic()方法,查询指定数据库中数据表的名称,最后输出查询结果集。关键代码如下:

        <%@ page contentType="text/html; charset=gbk" language="java" import="java.sql.*" errorPage="" %>
        <jsp:useBean id="dao" scope="page" class="com.pkh.dao.UserDao" />
        <%
            String SQL="Select name From sysobjects Where xtype='u' and status>0";
            ResultSet Rs = dao.selectStatic(SQL);
            while (Rs.next()){
        %>
            <tr bgcolor="#66CCCC">
                <td width="178"><div align="left" class="style3"><%=Rs.getString("name") %> </div></td>
        </tr>
        <%  }   %>

举一反三

根据本实例,读者可以:

查询指定的数据表;

修改数据表名;

以下拉列表的形式显示数据表。

实例106 列举MySQL数据库中的数据表

本实例是一个方便、实用的程序

实例位置:光盘\mingrisoft\04\106

实例说明

在开发网络应用程序时,有时需要获取指定数据库中所包含的数据表。本实例将介绍如何在JSP中获取MySQL数据库中的数据表。运行本实例,在页面中将显示数据库db_database04中的全部数据表,如图4.70所示。

图4.70 列举MySQL数据库中的数据表

技术要点

在MySQL中通过SHOW语句可以列出指定数据库中的数据表,其语法格式如下:

        SHOW TABLES [FROM databaseName] [LIKE expression];

参数说明:

FROM databaseName子句:可选项,用于指定要获取数据表的数据库。省略该子句,则列举当前打开数据库中的数据表,如果当前没有打开数据库,则返回错误信息。

LIKE expression子句:可选项,用于设置列举条件。expression是一个字符型表达式,可以包括通配符,如百分号(代表多个字符)、下划线(代表一个字符)等。

例如“LIKE '%book%'”将获取名称中包括book的数据表。

实现过程

(1)创建UserDao类,定义连接、查询和关闭数据库的方法。关键代码如下:

        public class UserDao {
        private final String url = "jdbc:mysql://localhost:3306/db_database04";
            private final String userName = "root";
            private final String password = "111";
            private Connection con = null;
            private Statement stmt = null;
            private ResultSet rs = null;
            public UserDao(){                   //通过构造方法加载数据库驱动
                try {
                    Class.forName("com.mysql.jdbc.Driver").newInstance();
                } catch (Exception ex) {
                    System.out.println("数据库加载失败");
                }
            }
            public boolean Connection(){         //创建数据库连接
                try {
                    con = DriverManager.getConnection(url, userName, password);
                } catch (SQLException e) {
                    System.out.println(e.getMessage());
                    System.out.println("creatConnectionError!");
                }
                return true;
            }
          public ResultSet selectStatic(String sql)throws SQLException{      //对数据库的查询操作
                ResultSet rs=null;                                        //定义ResultSet接口的返回值
                if(con==null){                                           //判断如果数据库没有连接
                    Connection();                                        //则执行该方法,连接数据库
                }
                try {
                    stmt=con.createStatement();     //创建返回Statement实例
                    rs=stmt.executeQuery(sql);      //执行静态sql语句
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                closeConnection();
                return rs;
            }
        }

(2)创建index.jsp页面,通过JavaBean标签调用数据库操作类UserDao,编写SQL语句并执行selectStatic()方法,查询指定数据库中数据表的名称,最后输出查询结果集。关键代码如下:

        <table width="100%" border="0" cellpadding="0" cellspacing="0" class="tab_border">
        <%
            try {
                while (rs.next()) {
        %>
            <tr>
                <td height="27">&nbsp;<%=rs.getString(1)%></td>
            </tr>
        <%
                }
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
        %>
        </table>

举一反三

根据本实例,读者可以:

在清空数据表时,将数据库中的全部数据表显示在下拉列表中供用户选择;

开发系统初始化模块。