4.9 使用代码创建数据库、数据表和字段

通常,数据库的创建都是使用SQL Server 2000设计完成的,但有时也需要使用程序代码来完成数据库的创建,这就是在网站中动态创建数据库的技术。

实例102 动态创建SQL Server数据库

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

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

实例说明

通过代码创建数据库是初始化数据库的常用方法。运行程序,在“数据库名”文本框中输入要创建的数据库名称,如图4.66所示,单击“提交”按钮,数据库创建成功。由于这里只提供创建数据库的名称,所以数据库将会创建到默认路径下。

图4.66 动态创建SQL Server数据库

技术要点

本实例主要应用SQL语句CREATE DATABASE创建数据库。

CREATE DATABASE语句语法如下:

        CREATE DATABASE database_name
        [ ON
            [ < filespec > [ ,...n ] ]
            [ , < filegroup > [ ,...n ] ]
        ]
        [ LOG ON { < filespec > [ ,...n ] } ]
        [ COLLATE collation_name ]
        [ FOR LOAD | FOR ATTACH ]
        < filespec > ::=
        [ PRIMARY ]
        ( [ NAME = logical_file_name , ]
            FILENAME = 'os_file_name'
            [ , SIZE = size ]
            [ , MAXSIZE = { max_size | UNLIMITED } ]
            [ , FILEGROWTH = growth_increment ] ) [ ,...n ]
        < filegroup > ::=
        FILEGROUP filegroup_name < filespec > [ ,...n ]

参数说明如下。

database_name:新数据库的名称。数据库的名称必须是唯一的,数据库的名称最多可以使用128个字符。

● ON:指定用来存储数据库部分的磁盘文件。

● n:占位符,可以为新数据库指定多个文件。

● NAME:数据库的逻辑名称。

● SIZE:指定数据库文件的大小。

实现过程

(1)创建index.jsp页面,添加form表单,提交要创建的数据库的名称,将数据提交到Create_DataBase类,在该类中完成数据库的创建。

(2)创建UserDao类,定义连接、创建和关闭数据库的方法。其中创建数据库使用的是CreateDataBase()方法,关键代码如下:

            public boolean CreateDataBase(final String SQL){
            if (con == null) {
                Connection();                       //连接数据库
            }
            try {
                stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
                ResultSet.CONCUR_UPDATABLE);
                int iCount=stmt.executeUpdate(SQL);  //执行SQL语句
                    System.out.println("操作成功,所影响的记录数为" + String.valueOf(iCount));
            } catch (SQLException e) {
                System.out.println(e.getMessage());
                return false;
            }
            closeConnection();                          //关闭数据库
            return true;                                 //返回结果
        }

(3)创建Servlet类Create_DataBase,定义doPost()方法,在该方法中判断提交的数据库名称是否为空,如果不为空则执行UserDao类中的CreateDataBase()方法,实现数据库的创建。关键代码如下:

        public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
            PrintWriter out = response.getWriter();
            UserDao dao=new UserDao();
            String basename=request.getParameter("textfield");
            if (basename==""){
                out.println("<script >alert('请添写要创建的数据库名!'); window.location.href='index.jsp';</script>");
            }else{
                String SQL="Create DATABASE "+basename;
                boolean iscreate =dao.CreateDataBase(SQL);
                if (iscreate){
                    out.println("<script >alert('数据库创建成功!'); window.location.href='index.jsp';</script>");
                }else{
                    out.println("<script >alert('数据库创建失败!'); window.location.href='index.jsp';</script>");
                }
            }
        }

(4)修改工程根目录下WEB-INF文件夹下的web.xml文件,配置Create_DataBase类,首先使用<servlet-name>与<servlet-class>标签配置servlet的名称与所在的包名类名,然后再通过<url-pattem>标签配置servlet的映射路径,关键代码如下:

        <servlet>
            <!--servlet的名称 -->
            <servlet-name>Create_DataBase</servlet-name>
            <!--servlet文件所在包,类的名称 -->
            <servlet-class>com.pkh.servlet. Create_DataBase</servlet-class>
        </servlet>
            <!-- 映射文件 -->
            <servlet-mapping>
                <!--要映射的servlet名称-->
                <servlet-name>Create_DataBase</servlet-name>
                <!--servlet具体映射路径,以"/"开头 -->
                <url-pattern>/Create_DataBase</url-pattern>
            </servlet-mapping>

举一反三

根据本实例,读者可以:

初始化商品管理系统时创建数据库;

创建临时数据库;

创建员工数据库。

实例103 动态创建SQL Server数据表和字段

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

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

实例说明

在开发一些网络管理软件时,客户有时需要自己创建一些表并选择该表可实现的功能。运行程序,在“数据库名”文本框中输入要创建表所在的数据库,在“数据表名”文本框中输入要创建的表名,如图4.67所示,单击“提交”按钮即可创建所需的数据表。

图4.67 动态创建SQL Server数据表和字段

技术要点

本实例主要使用CREATE TABLE语句创建数据表。语法如下:

        CREATE TABLE
            [ database_name.[ owner ] .| owner.] table_name
            ( { < column_definition >
                | column_name AS computed_column_expression
                | < table_constraint > ::= [ CONSTRAINT constraint_name ] }
                    | [ { PRIMARY KEY | UNIQUE } [ ,...n ]
            )
        [ ON { filegroup | DEFAULT } ]
        [ TEXTIMAGE_ON { filegroup | DEFAULT } ]
        < column_definition > ::= { column_name data_type }
            [ COLLATE < collation_name > ]
            [ [ DEFAULT constant_expression ]
                | [ IDENTITY [ ( seed , increment ) [ NOT FOR REPLICATION ] ] ]
            ]
            [ ROWGUIDCOL]
            [ < column_constraint > ] [ ...n ]

参数说明如下。

● database_name:创建数据表所在的数据库的名称,该数据库必须已存在。若不指定,默认为当前数据库。

● table_name:所要创建的数据表的名称。

● column_name:新数据表的字段名。字段名在同一表中必须唯一。

● data_type:数据表中字段的数据类型。

● DEFAULT:数据表中字段的默认值。

实现过程

(1)创建index.jsp页面,添加form表单,提交要创建的数据库和数据表名称,将数据提交到Create_DataBase类,在该类中完成数据库的创建。

注意:这里所指定的数据库必须是已经存在的数据库,如果不指定则默认为当前数据库。

(2)创建UserDao类,定义连接、创建和关闭数据库的方法。其中创建数据库使用的是CreateDataBase()方法,关键代码如下:

            public boolean CreateDataBase(final String SQL){
            if (con == null) {
                Connection();                       //连接数据库
            }
            try {
                stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
                ResultSet.CONCUR_UPDATABLE);
                int iCount=stmt.executeUpdate(SQL);  //执行SQL语句
                    System.out.println("操作成功,所影响的记录数为" + String.valueOf(iCount));
            } catch (SQLException e) {
                System.out.println(e.getMessage());
                return false;
            }
            closeConnection();                          //关闭数据库
            return true;                                //返回结果
        }

(3)创建Servlet类Create_DataBase,定义doPost()方法,在该方法中判断提交的数据库和数据表名称是否为空,如果不为空则执行UserDao类中的CreateDataBase()方法,实现数据库和数据表的创建。关键代码如下:

        public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
            PrintWriter out = response.getWriter();
            UserDao dao=new UserDao();
            String basename=request.getParameter("tdatabase");
            String table=request.getParameter("ttable");
            if (basename=="" || table==""){
                out.println("<script >alert('请添写要创建的数据库名!'); window.location.href='index.jsp';</script>");
            }else{
                String SQL="use"+basename+"Create TABLE"+table+"(项目编号int,项目名称varchar(40),级别int,注册时间
    datetime)";
                boolean iscreate =dao.CreateDataBase(SQL);
                if (iscreate){
                    out.println("<script >alert('数据库创建成功!'); window.location.href='index.jsp';</script>");
                }else{
                    out.println("<script >alert('数据库创建失败!'); window.location.href='index.jsp';</script>");
                }
            }
        }

(4)修改工程根目录下WEB-INF文件夹下的web.xml文件,配置Create_DataBase类。

举一反三

根据本实例,读者可以:

创建用户自定义数据表;

创建临时数据表;

创建主细数据表。

实例104 动态创建MySQL数据库

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

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

实例说明

所谓动态创建数据库是指通过代码直接创建数据库。在开发网络应用程序时,有时通过代码直接创建数据库会比手动创建更方便,因此,本实例将介绍如何在JSP中通过代码创建MySQL数据库。运行本实例,在“数据库名”文本框中输入图4.68所示的数据库名称后,单击“创建”按钮,即可创建相应的数据库,如果指定的数据库已经存在,则弹出“创建数据库失败”的提示对话框。

图4.68 动态创建MySQL数据库

说明:为了本实例能正确运行,要保证在MySQL中存在名称为mysql的数据库,该数据库为MySQL安装时自带的数据库。

技术要点

在MySQL中通过CREATE语句可以动态创建MySQL数据库,其语法格式如下:

        CREATE DATABASE [IF NOT EXISTS] databaseName;

参数说明如下。

● IF NOT EXISTS从句:可选项,如果不使用IF NOT EXISTS从句,在数据库已经存在时,将返回错误信息,否则不返回错误信息。

● databaseName:要创建的数据库名称。

实现过程

(1)创建index.jsp页面,添加form表单,提交要创建的数据库名称,将数据提交到Create_DataBase类,在该类中完成数据库的创建。

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

        public class UserDao {
            private Connection con = null;
            private Statement stmt = null;
            private ResultSet rs = null;
            public UserDao(){                                    //通过构造方法加载数据库驱动
                try {
                    Class.forName("org.gjt.mm.mysql.Driver");
                } catch (java.lang.ClassNotFoundException e) {
                    System.err.println(e.getMessage());
                }
            }
            public int createDB(String name){                      //定义创建数据库的方法
                String sql="create database"+name+";";            //定义创建数据库的语句
                System.out.println("SQL:" + sql);
                int result = 0;
                try {
                    con = DriverManager
            .getConnection("jdbc:mysql://127.0.0.1:3306/mysql?user=root&password=111&useUnicode=true");
                    stmt = con.createStatement();
                    result=stmt.executeUpdate(sql);              //执行SQL语句
                } catch (SQLException ex) {
                    result = 0;
                    System.out.println(ex.getMessage());
                } finally {
                }
                return result;
            }
            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;
                    }
                }
            }
        }

(3)创建Servlet类Create_DataBase,定义doPost()方法,在该方法中判断提交的数据库名称是否为空,如果不为空则执行UserDao类中的createDB ()方法创建数据库。关键代码如下:

            public void doPost(HttpServletRequest request,HttpServletResponse response)
                throws ServletException, IOException {
            PrintWriter out = response.getWriter();
            UserDao dao=new UserDao();                           //实例化数据库操作类
            String name=request.getParameter("databasename");   //获取表单中提交的数据库名称
            if (name==""){
                out.println("<script >alert('请添写要创建的数据库名!'); window.location.href='index.jsp';</script>");
            }else{
                int iscreate=dao.createDB(name);                //执行CreateDB方法,创建数据库
                if (iscreate==1){
                    out.println("<script >alert('数据库创建成功!'); window.location.href='index.jsp';</script>");
                }else{
                    out.println("<script >alert('数据库创建失败!'); window.location.href='index.jsp';</script>");
                }
            }
        }

(4)修改工程根目录下WEB-INF文件夹下的web.xml文件,配置Create_DataBase类。

举一反三

根据本实例,读者可以:

在开发网站后台管理程序时动态创建数据库。