自适应mysql和oracle(1)

发表时间:2017-05-15 17:15:26 浏览量( 31 ) 留言数( 0 )

学习目标:

1、了解Java的历史

2、为什么要学习Java语言

3、端正学习态度


学习过程:

在需求分许里面还有这么一个要求就是能自适应mysql和oracle,虽然只有这么一句话,但是我们应该如何才能实现这个功能,毕竟mysql和oracle数据库所支持的sql语言除了基本的增删改查是一样之外,还是有很多是不同的,比如说分页算法就不同,那么我们如何可以让使用者在不修改java源码的基础上就可以实现自适应mysql和oracle呢?这里我们的解决方法就是使用简单工厂模式,虽然还不是尽善尽美,但是还是可以勉强可以满足需求的,只是需要写的代码就比较多了,以后我们会有更好的实现,就是使用hibernate框架,这个是后话了,以后再说。今天先说说我们的实现方式吧,大家应该还记得简单工厂模式的实现吧。

首先,我们在在oracle数据库建立和mysql数据库一样的表结构,修改jdbc.properties文件,写上oracle的连接信息,以后用户需要切换数据库只需要修改这个文件即可,我们添加了一个新的属性db,根据这个db判断当前使用的是什么数据库,把mysql的连接信息注释了,打开oracle的连接信息即可。jdbc.properties文件内容如下:

#mysql的连接信息
db=mysql
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/webshop_db
name=root
password=123456
#oracle的连接信息
#driver =oracle.jdbc.driver.OracleDriver
#url =jdbc:oracle:thin:@localhost:1521:orcl
#name =liubao
#password =123456

这里我就一商品类别和商品做一个示例,也给大家一个思路,并没有全部完成,大家按照这个思路完成就可以了。

1、为dao层实现抽象一个接口。好的编程习惯都是面向接口进行编程的,不过我们之前的代码并没有这样做,所以我们需要抽象一个dao层的接口,然后mysql和oracle分别实现这个接口,以分别实现对mysql数据库和oracle数据库的操作。

商品操作的dao接口代码如下:

  /** * 商品dao接口 * @author Administrator * */public interface IGoodsDao {        /**     * 添加商品     *      * @param goods     * @return     */    public int add(Goods goods);    /**     * 根据Id删除商品     *      * @param id     * @return     */    public int del(int id);    /**     * 更新商品信息     *      * @param goods     * @return     */    public int update(Goods goods);    /**     * 根据商品Id获得单个商品信息     *      * @param id     * @return     */    public Goods getById(int id) ;    /**     * 根据商品类型分页显示商品信息列表     *      * @param typeId     *            商品类别ID     * @param page     *            分页信息     * @return     */    public List<Goods> getByType(int typeId, Page page) ;}

mysql的实现我们在之前就已经完成了,现在只需要修改这个GoodsDao,实现这个接口就可以了,代码如下:

  public class GoodsDao extends BaseDao implements IGoodsDao

新建一个GoodsOracleDao类,实现对Oracle的实现,代码如下:

  public class GoodsOracleDao extends BaseDao implements IGoodsDao{	/**	 * 添加商品	 * 	 * @param goods	 * @return	 */	public int add(Goods goods) {		int result = 0;		getCon();		String sql = "insert into goods(type_id,goods_name,cash,infos,pic,nums) values(?,?,?,?,?,?)";		result = exeUpdate(				sql,				new Object[] { goods.getTypeId(), goods.getGoodsName(),						goods.getCash(), goods.getInfos(), goods.getPic(),						goods.getNums() });		closeAll();		return result;	}	/**	 * 根据Id删除商品	 * 	 * @param id	 * @return	 */	public int del(int id) {		int result = 0;		getCon();		String sql = "delete from goods where goods_id=?";		result = exeUpdate(sql, new Object[] { id });		closeAll();		return result;	}	/**	 * 更新商品信息	 * 	 * @param goods	 * @return	 */	public int update(Goods goods) {		int result = 0;		getCon();		String sql = "update goods set type_id=?,goods_name=?,cash=?,infos=?,pic=?,nums=?  where goods_id=?";		result = exeUpdate(				sql,				new Object[] { goods.getTypeId(), goods.getGoodsName(),						goods.getCash(), goods.getInfos(), goods.getPic(),						goods.getNums(), goods.getGoodsId() });		closeAll();		return result;	}	/**	 * 根据商品Id获得单个商品信息	 * 	 * @param id	 * @return	 */	public Goods getById(int id) {		Goods goods = null;		getCon();		String sql = "select * from goods where goods_id=?";		rs = exeQuery(sql, new Object[] { id });		try {			if (rs.next()) {				goods = new Goods();				goods.setCash(rs.getDouble("cash"));				goods.setGoodsId(rs.getInt("goods_id"));				goods.setGoodsName(rs.getString("goods_name"));				goods.setInfos(rs.getString("infos"));				goods.setNums(rs.getInt("nums"));				goods.setPic(rs.getString("pic"));				goods.setTypeId(rs.getInt("type_id"));			}		} catch (SQLException e) {			// TODO Auto-generated catch block			e.printStackTrace();		} finally {			closeAll();		}		return goods;	}	/**	 * 根据商品类型分页显示商品信息列表	 * 	 * @param typeId	 *            商品类别ID	 * @param page	 *            分页信息	 * @return	 */	public List

GoodsTypeDao也是这样,先设计接口,然后在分别实现就可以了。其他的Dao也是一样,这里就不一一的列出来的。