- Java Web程序开发范例宝典
- 王国辉 郭铁 李根福编著
- 853字
- 2020-06-27 11:01:04
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类。
举一反三
根据本实例,读者可以:
在开发网站后台管理程序时动态创建数据库。