Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1677849
  • 博文数量: 585
  • 博客积分: 14610
  • 博客等级: 上将
  • 技术积分: 7402
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-15 10:52
文章存档

2013年(5)

2012年(214)

2011年(56)

2010年(66)

2009年(44)

2008年(200)

分类:

2008-05-15 20:46:49


网上书店___使用Servlet通过JDBC操作MySQL数据库

   

 

  

 

       编写CreateDBServlet这个Servlet来完成创建bookstore数据库,新建bookinfo表及向其中插入数据的功能,来演示JDBC的使用!

 

运行环境:

JDK 1.6.0

Tomcat 6.0.14

JDBC 3.0.17

MySQL5.0.22

 

1, 编写CreateDBServlet.java

    这个Servlet用于创建存储图书信息的数据库和表

   

 

/*

 *用于创建存储图书信息的数据库和表

 */

 

package cn.apache.pl;

 

import java.io.*;

import java.sql.*;

import javax.servlet.*;

import javax.servlet.http.*;

 

public class CreateDBServlet extends HttpServlet

{

    private String url;

    private String user;

    private String password;

   

    public void init() throws ServletException

    {

       /*

        *调用getInitParameter()方法得到JDBC驱动程序的类名,

        *连接URL,用户名,密码,我们将这些信息放在web.xml文件中配置,

        *如果需要更好数据库或连接信息时,只需要修改web.xml文件即可

        */

       String driverClass = getInitParameter("driverClass");

       url      = getInitParameter("url");

       user     = getInitParameter("user");

       password = getInitParameter("password");

      

       /*

        *调用Class类的静态方法forName()加载并注册JDBC驱动程序,

        *如果没有找到驱动程序类,抛出UnavailableException异常,

        *通知Servlet容器,Servlet永久不可用

        */

       try

       {

           Class.forName(driverClass);

       }catch(ClassNotFoundException ce)

       {

           throw new UnavailableException("加载数据库驱动失败");

       }

    }

   

    public void doGet(HttpServletRequest req, HttpServletResponse resp)

       throws ServletException, IOException

    {

       Connection conn  = null;

       Statement  stmt  = null;

          

       try

       {

           //调用DriverManager类的静态方法getConnection()得到数据库的连接对象

           conn = DriverManager.getConnection(url, user, password);

          

           //调用连接对象的createStatement()方法创建一个Statement对象

           stmt = conn.createStatement();

          

           //利用Statement对象创建bookstore数据库

           stmt.executeUpdate("create database bookstore");

          

           //user bookstore数据库

           stmt.executeUpdate("use bookstore");

          

           /*

            *创建bookinfo数据表,用来存储图书信息,新建以下字段:

            *id          图书编号

            *title           书名

            *author      作者

            *bookconcern     出版社

            *publish_date    出版日期

            *price           价格

            *amount      数量

            *remark      备注

            */

            

            //该条语句最后"ENGINE = InnoDB",用于指定表的存储引擎使用InnoDB

           stmt.execute("create table bookinfo(id INT not null primary key, title VARCHAR(50) not null, author VARCHAR(50) not null, bookconcern VARCHAR(100) not null, publish_date DATE not null, price FLOAT(4,2) not null, amount SMALLINT,remark VARCHAR(200)) ENGINE = InnoDB");

          

           //调用Statement对象的addBatch()方法将插入数据的SQL语句组成一个命令列表

           stmt.addBatch("insert into bookinfo values(1,'JAVA从入门到精通','孙卫琴','电子工业出版社','2004-6-1',34.00,35,null)");

           stmt.addBatch("insert into bookinfo values(2,'JSP应用开发详解','刘小华','清华大学出版社','2005-10-3',56.00,20,null)");

           stmt.addBatch("insert into bookinfo values(3,'MySQL数据库编程','孙鑫','人民邮电出版社','2006-6-29',78.00,10,null)");

          

           //调用executeBatch()方法批量执行这些SQL语句

           //大量SQL语句批量执行可以显著提高性能,减少服务器负载

           stmt.executeBatch();

          

           //如果创建成功,则输出success!

           PrintWriter out = resp.getWriter();

           out.println("success!");

           out.close();

          

       }catch(SQLException se)

       {

           se.printStackTrace();

          

       /*finally语句中依次关闭Statement对象和Connection对象,

        *之所以在finally语句中处理,可以保证不管是正常执行还是执行

        *过程中发生了异常,都会关闭它们.

        */

       }finally

       {

           if(stmt != null)

           {

              try

              {

                  stmt.close();

              }catch(SQLException se)

              {

                  se.printStackTrace();

              }

             

              stmt = null;

           }

          

           if(conn != null)

           {

              try

              {

                  conn.close();

                 

              }catch(SQLException se)

              {

                  se.printStackTrace();

              }

             

              conn = null;

           }

       }

    }

}

   

2,bookinfo表的结构

    

                            

id

bookinfo表的主键,整型,唯一标示一本图书

title

字符串类型,书名

author

字符串类型,作者

bookconcern

字符串类型,出版社

public_date

日期类型,出版日期

price

单精度浮点型,价格

amount

整型,库存量

remark

字符串类型,备注

   

3, web.xml文件配置如下:

        通过调用getInitParameter()方法得到JDBC驱动程序的类名,连接URL,用户名,密码

 

 

 

    CreateDBServlet

    cn.apache.pl.CreateDBServlet

 

   

       driverClass

       com.mysql.jdbc.Driver

   

 

   

       url

       jdbc:mysql://localhost:3306/mysql

   

 

   

       user

       root

   

 

   

       password

       123

   

 

 

 

    CreateDBServlet

    /createdb

 

 

4,  JDBC驱动类放到\bin目录中,编译CreateDBServlet.java文件,

    启动Tomcat服务器,在浏览器中打开,页面显示

    “success!”,则表明创建数据库和表成功.

   

5,  MySQL命令行中,

    <1>查看已经存在的数据库:

    mysql> show databases;

    +--------------------+

    | Database           |

    +--------------------+

    | information_schema |

    | bookstore          |

    | mysql              |

    | storedb            |

    | test               |

    +--------------------+

    5 rows in set (0.02 sec)

 

    <2>查看bookstore数据库中存在的表:

 

    mysql> use bookstore;

    Database changed

    mysql> show tables;

    +---------------------+

    | Tables_in_bookstore |

    +---------------------+

    | bookinfo            |

    +---------------------+

    1 row in set (0.00 sec)

 

    <3>查看表结构:

    mysql> desc bookinfo;

    +--------------+--------------+------+-----+---------+-------+

    | Field        | Type         | Null | Key | Default | Extra |

    +--------------+--------------+------+-----+---------+-------+

    | id           | int(11)      | NO   | PRI | NULL    |       |

    | title        | varchar(50)  | NO   |     | NULL    |       |

    | author       | varchar(50)  | NO   |     | NULL    |       |

    | bookconcern  | varchar(100) | NO   |     | NULL    |       |

    | publish_date | date         | NO   |     | NULL    |       |

    | price        | float(4,2)   | NO   |     | NULL    |       |

    | amount       | smallint(6)  | YES  |     | NULL    |       |

    | remark       | varchar(200) | YES  |     | NULL    |       |

    +--------------+--------------+------+-----+---------+-------+

    8 rows in set (0.00 sec)

   

    <4>查看表内容:

    mysql> select * from bookinfo;

+----+------------------+--------+----------------+--------------+-------+--------+--------+

| id | title            | author | bookconcern    | publish_date | price | amount | remark |

+----+------------------+--------+----------------+--------------+-------+--------+------

|  1 | JAVA从入门到精通 | 孙卫琴 | 电子工业出版社 | 2004-06-01    | 34.00 |     35 | NULL  |

|  2 | JSP应用开发详解  | 刘小华 | 清华大学出版社 | 2005-10-03    | 56.00 |     20 | NULL  |

|  3 | MySQL数据库编程  | 孙鑫   | 人民邮电出版社 | 2006-06-29    | 78.00 |     10 | NULL  |

+----+------------------+--------+----------------+--------------+-------+--------+------

3 rows in set

阅读(532) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~