4.13 在线删除表或索引

在开发网络数据库程序时,经常需要动态创建或删除数据表或索引。可以设计网站后台程序满足这样的需求。

实例111 在线删除指定的一个数据表

本实例是一个数据库操作的程序

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

实例说明

在开发网络数据库程序时,对数据库中的数据操作是非常重要的,本实例实现通过SQL语句删除数据库中指定的数据表。运行程序,选择数据表名前面的单选按钮,单击“删除”按钮,选中的数据表将会被删除,如图4.75所示。

图4.75 在线删除指定的一个数据表

技术要点

本实例主要应用了SQL语句中的DROP TABLE语句,语法如下:

        DROP TABLE  table_name

参数说明:

● table_name:要删除的数据表的名称。

实现过程

(1)创建UserDao类,定义数据库连接和执行查询操作的方法。

(2)创建JavaScript脚本语句,定义Delete()函数实现删除指定数据表的操作,代码如下:

        <script language="JavaScript" type="text/JavaScript">
        function Delete(){
            <%
                String Table = "";
                Table=request.getParameter("radiobutton");
                if (Table!=""){
                    Exec("Drop Table "+Table);
                }
            %>
        }
        </script>

(3)创建index.jsp页面,通过UserDao类中的selectStatic()方法,查询出指定数据库中的数据表,并通过while语句输出查询结果集中的数据。创建form表单,将查询出的数据作为单选按钮的值。关键代码如下:

        <jsp:useBean id="dao" scope="page" class="com.pkh.dao.UserDao" />
        <form name="form1" method="post" action="" onsubmit="Delete()">
        <%
            ResultSet Rs = dao.selectStatic("Select * From Sysobjects Where xtype = 'u'");
            while(Rs.next()){
        %>
        <tr>
            <td bgcolor="#CCFF66">
                <input type="radio" name="radiobutton" value="<%=Rs.getString("name") %>"><%=Rs.getString("name") %>
            </td>
            </tr>
        <%  }   %>
                <input type="submit" name="Submit" value="删除">
        </form>

举一反三

根据本实例,读者可以:

开发数据库系统;

删除临时数据表;

删除主从数据表。

实例112 在线删除多个指定的数据表

本实例是一个数据库操作的程序

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

实例说明

本实例主要通过复选框的形式在线删除指定的多个数据表。运行程序,在页面上将会显示出数据库中的所有用户表,选中要删除的数据表前面的复选框,单击“删除”按钮,即可将选中的所有数据表从数据库中删除,如图4.76所示。

图4.76 在线删除多个指定的数据表

技术要点

本实例首先利用sysobjects表将数据库中的所有用户表显示出来,并在每个表名的前面加上复选框,设置复选框的名称都相同,然后利用getParameterValues()方法返回字符串数组,该数组为所选中的复选框的所有名称,最后循环执行数据表删除操作。

实现过程

(1)创建UserDao类,定义数据库连接和执行查询操作的方法。

(2)创建JavaScript脚本语句,定义Delete()函数实现删除指定数据表的操作,代码如下:

        <script language="JavaScript" type="text/JavaScript">
            function Delete(){
            <%
                String Table[]=request.getParameterValues("checkbox");      //获取复选框的值
                if (Table!=null)
                    for(int i=0;i<Table.length;i++){                        //循环输出复选框的值
                        dao.executeUpdate("Drop Table"+Table[i]);           //执行删除表的操作
                    }
            %>
            }
        </script>

(3)创建index.jsp页面,通过UserDao类中的selectStatic()方法,查询出指定数据库中的数据表,并通过while语句输出查询结果集中的数据。创建form表单,将查询出的数据作为单选按钮的值。关键代码如下:

        <jsp:useBean id="dao" scope="page" class="com.pkh.dao.UserDao" />
        <form name="form1" method="post" action="" onsubmit="Delete()">
        <%
            ResultSet Rs = dao.selectStatic("Select * From Sysobjects Where xtype = 'u'");
            while(Rs.next()){                     //循环输出数据库中的数据表
        %>
        <tr>
            <td bgcolor="#CCFF66">
                <input type="checkbox" name="checkbox" value="<%=Rs.getString("name") %>"><%=Rs.getString("name") %>
            </td>
        </tr>
        <%  }   %>
                <input type="submit" name="Submit" value="删除">
        </form>

举一反三

根据本实例,读者可以:

维护网站后台数据库程序;

清除网站中的临时数据表;

删除基础信息表。

实例113 在线删除指定数据表中的指定索引

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

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

实例说明

在开发网络程序时,索引的创建与删除有助于数据表的快速查询。本实例完成了索引的创建与

图4.77 在线删除指定数据表中的指定索引

删除。运行程序,首先将数据表中的所有索引显示出来。单击“创建”按钮,将进入索引创建页面,在该页面中输入索引的名称和设置索引的字段,单击“创建索引”按钮,索引将被创建。在主页面单击“删除”按钮,删除当前索引,如图4.77所示。

技术要点

本实例主要使用SQL语句的sp_helpindex过程来显示表中的索引信息,用DROP INDEX语句删除表中的索引,用CREATE INDEX语句来创建表中的索引。

(1)CREATE INDEX语句。

语法如下:

        CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
            ON { table | view } ( column [ ASC | DESC ] [ ,...n ] )
        [ WITH < index_option > [ ,...n] ]
        [ ON filegroup ]
        < index_option > ::=
            { PAD_INDEX |
                FILLFACTOR = fillfactor |
                IGNORE_DUP_KEY |
                DROP_EXISTING |
            STATISTICS_NORECOMPUTE |
            SORT_IN_TEMPDB
        }

参数说明:

● UNIQUE:指定创建唯一索引。注意:SQL Server不允许为已经包含重复值的字段创建唯一索引。如果尝试这样做,SQL Server会显示错误信息,因此必须先删除重复值,才能为这些字段创建唯一索引。

● CLUSTERED:指定创建一个聚集索引。如要没有指定CLUSTERED,则创建非聚集索引。

● NONCLUSTERED:指定创建一个非聚集的索引。

● index_name:指定创建索引的索引名。

● table:指定要创建索引的表。

● column:指定应用索引的字段。如果指定的是多个字段,可以对多个字段的组合值创建组合索引。

(2)DROP INDEX语句。

语法如下:

        DROP INDEX 'table.index | view.index' [ ,...n ]

参数说明:

● table | view:是索引列所在的表或索引视图。

● index:是要删除的索引名称。索引名称必须符合标识符的规则。

● n:表示可以指定多个索引的占位符。

实现过程

(1)创建UserDao类,定义数据库连接和执行查询语句的方法。

(2)创建index.jsp页面,通过UserDao类中的selectStatic()方法,查询出数据库中数据表的索引;并且添加表单,设置添加索引的“创建”、“删除”按钮,代码如下:

        <%@ page contentType="text/html; charset=gbk" language="java" import="java.sql.*" errorPage="" %>
        <jsp:useBean id="dao" scope="page" class="com.pkh.dao.UserDao" />
        <form name="form1" method="post" action="">
        <%
            ResultSet Rs=dao.selectStatic("sp_helpindex tb_ClassList");           //获取查询结果集
            while(Rs.next()){                                                   //输出数据表中的索引
        %>
        <tr bgcolor="#33FFFF">
            <td height="22" bgcolor="#FFFFFF" class="STYLE2"><div align="center"><%=Rs.getString("index_name")%></div></td>
            <td bgcolor="#FFFFFF" class="STYLE2"><div align="center"><%=Rs.getString("index_keys")%></div></td>
            <td bgcolor="#FFFFFF" class="STYLE2"><div align="center">
                <input type="button" name="Submit" value="删除"
    onclick="window.location.href='index_ok.jsp?orderid=<%= Rs.getString("index_name")%>';">/
                <input name="Submit" type="button" id="Submit" value="创建" onclick="window.location.href='index_ok.jsp';">
          </div></td>
        </tr>
        <%  }   %>
        </form>

(3)创建index_ok.jsp页面,通过DROP INDEX语句删除表中指定的索引;通过CREATE INDEX语句动态创建表的索引。关键代码如下:

        <%@ page contentType="text/html; charset=gbk" language="java"
            import="java.sql.*" errorPage=""%>
        <jsp:useBean id="dao" scope="page" class="com.pkh.dao.UserDao" />
        <%
            boolean m=dao.executeUpdate("drop index tb_ClassList."+request.getParameter("orderid"));    //执行删除索引
            if(m){
                out.print("<script>window.alert('索引删除成功!');window.location.href='index.jsp';</script>");
            }
        %>
        <%
            if (request.getParameter("textfield")!=""){
                boolean i = dao.executeUpdate("CREATE INDEX "+request.getParameter("textfield")+" on tb_ClassList ("+request.
    getParameter("select")+")");                        //创建索引
                if (i){
                    out.print("<script>window.alert('索引添加成功!'); </script>");
                }
            }
        %>
        <form name="form1" method="post" action="" onsubmit="check()">
            <input type="text" name="textfield">
            <select name="select">
            <%
                ResultSet Rs=dao.selectStatic("Select top 0*From tb_ClassList");   //获取查询结果集
                ResultSetMetaData rsmd=Rs.getMetaData();                        //输出数据表中的字段
                for (int i=1;i<rsmd.getColumnCount();i++){
            %>
                <option value="<%=rsmd.getColumnName(i)%>"><%=rsmd.getColumnName(i)%></option>
            <%
                }
            %>
            </select>
            <input type="submit" name="Submit" value="创建索引">
                <input type="reset" name="Submit2" value="重置">
                <input type="button" name="Submit3" value="返回" onclick="window.location.href='index.jsp';">
        </form>

举一反三

根据本实例,读者可以:

开发在线美食查询系统;

开发在线搜索系统;

开发在线员工查询系统。