简易购物车

 先建个大思路框架:显示层(JSP)---控制层(Servlet)---业务层(Service)---数据访问层(DAO)---数据库(DB).
    今天就先搭一个数据库的架子,至于 各个功能的实现,明天在做详细分析!
1.建表:
bookstore.sql:
# MySQL-Front 3.2  (Build 6.2)

;
;
;
;

# Host: localhost:3309    Database: bookstore
# ------------------------------------------------------
# Server version 5.0.18-nt

#
# Table structure for table books
#
CREATE DATABASE bookstore;

USE bookstore;

DROP TABLE IF EXISTS `books`;
CREATE TABLE `books` (
  `id` varchar(8) NOT NULL,
  `name` varchar(24) default NULL,
  `title` varchar(96) default NULL,
  `price` float default NULL,
  `yr` int(11) default NULL,
  `description` varchar(30) default NULL,
  `saleAmount` int(11) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;

#
# Dumping data for table books
#

INSERT INTO `books` (`id`,`name`,`title`,`price`,`yr`,`description`,`saleAmount`) VALUES ('201','王芳','Java编程指南',33.75,1999,'让读者轻轻松松掌握Java语言',1);
INSERT INTO `books` (`id`,`name`,`title`,`price`,`yr`,`description`,`saleAmount`) VALUES ('202','张丙','Weblogic技术参考',45.99,2002,'真的不错耶',1);
INSERT INTO `books` (`id`,`name`,`title`,`price`,`yr`,`description`,`saleAmount`) VALUES ('203','孙艳','Oracle数据库教程',40,2003,'关于Oracle的最畅销的技术书',1);
INSERT INTO `books` (`id`,`name`,`title`,`price`,`yr`,`description`,`saleAmount`) VALUES ('204','大卫','从Oak到Java: 语言的革命',20.75,1998,'很值得一看',1);
INSERT INTO `books` (`id`,`name`,`title`,`price`,`yr`,`description`,`saleAmount`) VALUES ('205','阿明','Apache从入门到精通',50.75,2002,'权威的Apache技术资料',1);
INSERT INTO `books` (`id`,`name`,`title`,`price`,`yr`,`description`,`saleAmount`) VALUES ('206','洪军','Java与数据算法 ',54.75,2002,'权威的Java技术资料',1);

#
# Table structure for table customer
#

DROP TABLE IF EXISTS `customer`;
CREATE TABLE `customer` (
  `id` int(11) NOT NULL default '0',
  `name` varchar(30) default NULL,
  `cardid` varchar(11) default NULL,
  `balance` float(6,2) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;

#
# Dumping data for table customer
#

INSERT INTO `customer` (`id`,`name`,`cardid`,`balance`) VALUES (1,'Tom','1234567890',1000);

;
;
;

2.数据库是必要要的!有了 数据库就要 有 数据库连接 :
这里要先导架包:
commons-collections-3.1.jar
commons-dbcp-1.2.2.jar
commons-pool-1.2.jar
mysql-connector-java-5.1.6-bin.jar
要导入连接池的配置文件
dbcpconfig_mysql.properties
dbcpconfig_oracle.properties

package com.myshopping.db;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSourceFactory;

import com.myshopping.util.MyBookConstants;
import com.myshopping.web.MyBookWebConfig;


public class DBHelper {
 
  private static DataSource ds = null;
  
  static{
   String dbType = null;
   dbType = MyBookWebConfig.getInstance().getValue(MyBookConstants.DB_TYPE);
   String propFileName = null;
   if(dbType.equals("mysql")){
    propFileName = "dbcpconfig_mysql.properties";
   }
   if(dbType.equals("oracle")){
    propFileName = "dbcpconfig_oracle.properties";
   }
   
   InputStream is = null;
   is = DBHelper.class.getClassLoader().getResourceAsStream(propFileName);
 
   Properties prop = new Properties();
   
   try {
    prop.load(is);
   } catch (IOException e) {
    e.printStackTrace();
    throw new RuntimeException(MyBookConstants.LOAD_DBPROP_FILE_EXCEPTION_MESSAGE);
   }
   
   try {
    ds = BasicDataSourceFactory.createDataSource(prop);
   } catch (Exception e) {
    e.printStackTrace();
    throw new RuntimeException(MyBookConstants.GET_DATASOURCE_EXCEPTION_MESSAGE);
   }
  }
 
 
  public static Connection getonnection(){
   Connection conn = null;
   
   try {
    conn = ds.getConnection();
   } catch (SQLException e) {
    e.printStackTrace();
    throw new RuntimeException(MyBookConstants.GET_CONNECTION_EXCEPTION_MESSAGE);
   }
   return conn;
  }
  
  public static void releaseDBSource(ResultSet rs,Statement st,Connection conn){
   try {
    if(rs != null)
     rs.close();
    if(st != null)
     st.close();
    if(conn != null)
     conn.close();
   } catch (SQLException e) {
    e.printStackTrace();
    throw new RuntimeException(MyBookConstants.CLOSE_DATABASE_SOURCE_EXCEPTION_MESSAGE);
   }
  }
  
  
}
3.上段代码中用了 dbType,这里选择数据库时,我们要做个监听,并在WEB.XML中进行配置:
package com.myshopping.listener;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import com.myshopping.util.MyBookConstants;
import com.myshopping.web.MyBookWebConfig;

public class BookAppListener implements ServletContextListener {

 public void contextDestroyed(ServletContextEvent arg0) {
  // TODO Auto-generated method stub

 }

 public void contextInitialized(ServletContextEvent arg0) {
  // TODO Auto-generated method stub
  ServletContext sc = arg0.getServletContext();
  
  String dbType = sc.getInitParameter("dbType");
  
  MyBookWebConfig.getInstance().addParam(MyBookConstants.DB_TYPE, dbType);
 }

}
4.有了dbType,就要添加键值:
package com.myshopping.web;

import java.util.HashMap;
import java.util.Map;

public class MyBookWebConfig {
 private Map paramMap = null;
 
 private MyBookWebConfig(){
  paramMap = new HashMap();
 }
 
 private static MyBookWebConfig instance = null;
 
 static{
  instance = new MyBookWebConfig();
 }
 
 public static MyBookWebConfig getInstance(){
  return instance;
 }
 
 public void addParam(String key, String value){
  this.paramMap.put(key, value);
 }
 public String getValue(String key){
  if(this.paramMap.get(key) == null)
   return null;
  else
   return (String) this.paramMap.get(key);
  
 }

}
 5.这里我们还要定一个常量类,方便调用!
package com.myshopping.util;

public class MyBookConstants {
 public static final String DB_TYPE = "dbType";
 
 //异常信息
 public static final String GET_CONNECTION_EXCEPTION_MESSAGE = "根据 已经数据源获取数据连接异常";
 public static final String GET_DATASOURCE_EXCEPTION_MESSAGE = "根据已经加载成功的属性文件获取数据源异常";
 public static final String LOAD_DBPROP_FILE_EXCEPTION_MESSAGE = "加载数据库属性文件异常";
 public static final String CLOSE_DATABASE_SOURCE_EXCEPTION_MESSAGE = "根据 已经数据源获取数据库连接异常 ";
}
配置下web.xml,这里就写需要的配置的代码段:
<context-param>
   <param-name>dbType</param-name>
   <param-value>mysql</param-value>
  </context-param>
  <servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>CatalogServlet</servlet-name>
    <servlet-class>com.myshopping.servlet.CatalogServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>CatalogServlet</servlet-name>
    <url-pattern>/catalogServlet</url-pattern>
  </servlet-mapping>
 
  <listener>
   <listener-class>com.myshopping.listener.BookAppListener</listener-class>
  </listener>

上面这几部是完成功能实现的基础,就像建房子一样,没有根基,上层的思想再完美也是徒劳!明天实现获取图书的功能!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值