热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用commonsdbutils

2019独角兽企业重金招聘Python工程师标准packagecommon;importjava.io.IOException;importjava.sql.Connect

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

123621_SUU3_2356966.png

package common;import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;/*** 数据库连接工厂* @author sally**/
public class ConnectionFactory {
private static Properties prop=new Properties();static{try {prop.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("jdbc.properties"));} catch (IOException e) {e.printStackTrace();System.out.println("在classpath下没有找到jdbc.properties文件");}}/*** 根据数据库的默认连接参数获取数据库的Connection对象* @return 成功,返回Connection对象,否则返回null*/public static Connection getConnection(){Connection conn=null;try {Class.forName(prop.getProperty("driver"));conn=DriverManager.getConnection(prop.getProperty("url"), prop.getProperty("user"), prop.getProperty("password"));} catch (ClassNotFoundException e) {e.printStackTrace();}catch (SQLException e) {e.printStackTrace();}return conn;}
}

package dao;public class DaoException extends RuntimeException {/*** */private static final long serialVersionUID = -4554375587092492837L;public DaoException(){// TODO Auto-generated constructor stub}public DaoException(String arg0) {super(arg0);// TODO Auto-generated constructor stub}public DaoException(Throwable arg0) {super(arg0);// TODO Auto-generated constructor stub}public DaoException(String arg0, Throwable arg1) {super(arg0, arg1);// TODO Auto-generated constructor stub}public DaoException(String arg0, Throwable arg1, boolean arg2, boolean arg3) {super(arg0, arg1, arg2, arg3);// TODO Auto-generated constructor stub}}

package dao;import java.io.IOException;
import java.util.Properties;public class DaoFactory {private static Properties prop=new Properties();static{try {prop.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("dao.properties"));} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();System.out.println("在classpath下没有找到Dao工厂的配置文件dao.properties");}}private DaoFactory() {}/*** 从dao.properties获取对象* @param daoName dao的标识名* @return 对应的实现类的实例*/public static Object getInstance(String daoName){Object obj=null;String className=prop.getProperty(daoName);try {obj=Class.forName(className).newInstance();} catch (InstantiationException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}return obj;}
}

package dao;import java.util.List;import entity.PageModel;
import entity.Product;public interface ProductDao {/** * 新增产品* @param pro 产品实例* @throws DaoException 如果操作失败,会抛出DaoException这个非受检异常* */public void insert(Product pro) throws DaoException;/** 更新产品信息*/public void update(Product pro) throws DaoException;/** 根据ID删除产品*/public void delete(int id) throws DaoException;/** 查询所有产品,以List方式返回* @return 符合条件的产品实例的列表* @throws DaoException 如果操作失败,会抛出DaoException这个非受检的异常* */public List getProductList() throws DaoException;/** 根据ID查询产品* @param id 产品id* @return 符合条件的产品实例,如果不存在,返回null* @throws DaoException 如果操作失败,会抛出DaoException这个非受检异常* */public Product getProduct(int id) throws DaoException;/** 分页查询数据* @param pageSize是每页显示的记录数* @param pageNo要查询的页号* @return 符合条件的分布数据模型PageModel实例* @throws DaoException* */public PageModel getProListByPage(int pageNo,int pageSize) throws DaoException;/** 根据姓名模糊查询员工,以分页数据方式返回*/public PageModel getProListByPage(String name,int pageNo,int pageSize) throws DaoException;}

package entity;import java.io.Serializable;
import java.util.List;public class PageModel implements Serializable{/*** */private static final long serialVersionUID = 8650004680285850659L;private Long recordCount;private List data;public Long getRecordCount() {return recordCount;}public void setRecordCount(Long recordCount) {this.recordCount = recordCount;}public List getData() {return data;}public void setData(List data) {this.data = data;}}

package entity;import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;public class Product {private int id;private String name;private double price;private Date date;public Product() {super();}public Product(int id, String name, double price, Date date) {super();this.id = id;this.name = name;this.price = price;this.date = date;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}public Date getDate() {return date;}public void setDate(Date date) {this.date = date;}@Overridepublic String toString() {DateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String str=this.date==null?"":df.format(date);return "Product [id=" + id + ", name=" + name + ", price=" + price+ ", date=" + str + "]";}}

package impl;import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;import common.ConnectionFactory;
import dao.DaoException;
import dao.ProductDao;
import entity.PageModel;
import entity.Product;/*** 产品的Dao操作实现类* @author sally**/public class ProductDaoImpl implements ProductDao {private QueryRunner qr=new QueryRunner();//commons-dbutils包带的:SQL的执行器,线程安全的@Overridepublic void insert(Product pro) throws DaoException {Connection conn=ConnectionFactory.getConnection();String sql="insert into product(name,price,date)values(?,?,now())";Object[] params={pro.getName(),pro.getPrice()};try {qr.update(conn, sql, params);} catch (SQLException e) {throw new DaoException("新增产品时出现异常",e);}finally{DbUtils.closeQuietly(conn);}}@Overridepublic void update(Product pro) throws DaoException {Connection conn=ConnectionFactory.getConnection();String sql="update product set name=?,price=?,date=? where id=?";Object[] params={pro.getName(),pro.getPrice(),pro.getDate(),pro.getId()};try {qr.update(conn, sql, params);} catch (SQLException e) {throw new DaoException("产品更新时出现异常",e);}finally{DbUtils.closeQuietly(conn);}}@Overridepublic void delete(int id) throws DaoException {Connection conn=ConnectionFactory.getConnection();String sql="delete from product where id=?";try {qr.update(conn, sql, id);} catch (SQLException e) {throw new DaoException("产品删除时出现异常",e);}finally{DbUtils.closeQuietly(conn);}}@Overridepublic List getProductList() throws DaoException {List list=null;Connection conn=ConnectionFactory.getConnection();String sql="select name,price,date from product";try {list=qr.query(conn, sql, new BeanListHandler(Product.class));} catch (SQLException e) {throw new DaoException("根据id查找产品时出现异常",e);}finally{DbUtils.closeQuietly(conn);}return list;}@Overridepublic Product getProduct(int id) throws DaoException {Connection conn=ConnectionFactory.getConnection();String sql="select name,price,date from product where id=?";Product pro=null;try {pro=qr.query(conn, sql, new BeanHandler(Product.class),id);} catch (SQLException e) {throw new DaoException("根据id查找产品时出现异常",e);}finally{DbUtils.closeQuietly(conn);}return pro;}@Overridepublic PageModel getProListByPage(int pageNo, int pageSize)throws DaoException {PageModel pm=new PageModel();Connection conn=ConnectionFactory.getConnection();String sqlCount="select count(id) from product";String sql="select id,name,price,date from product limit ?,?";try {Long count=(Long)qr.query(conn, sqlCount, new ScalarHandler());if(count>0){pm.setRecordCount(count);pm.setData(qr.query(conn, sql, new BeanListHandler(Product.class),(pageNo-1)*pageSize,pageSize));}} catch (SQLException e) {throw new DaoException("根据id查找产品时出现异常",e);}finally{DbUtils.closeQuietly(conn);}return pm;}@Overridepublic PageModel getProListByPage(String name, int pageNo,int pageSize) throws DaoException {// TODO Auto-generated method stubreturn null;}}

package testdao;import dao.DaoFactory;
import dao.ProductDao;
import entity.PageModel;
import entity.Product;/*** Product的Dao测试类* @author sally**/
public class ProductDaoTest {public static void main(String[] args) {//testInsert();testGetListByPage();}public static void testInsert(){ProductDao dao=(ProductDao)DaoFactory.getInstance("productDao");Product prod=new Product();prod.setName("电脑");prod.setPrice(8000.00);dao.insert(prod);}public static void testGetListByPage(){ProductDao dao=(ProductDao)DaoFactory.getInstance("productDao");PageModel pm=dao.getProListByPage(2, 5);System.out.println("总记录数"+pm.getRecordCount());for(Product pro:pm.getData()){System.out.println(pro);}}}

productDao=impl.ProductDaoImpl

#MySQL Connection Parameters
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8
user=root
password=root



转载于:https://my.oschina.net/u/2356966/blog/418886


推荐阅读
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • PHP中的单例模式与静态变量的区别及使用方法
    本文介绍了PHP中的单例模式与静态变量的区别及使用方法。在PHP中,静态变量的存活周期仅仅是每次PHP的会话周期,与Java、C++不同。静态变量在PHP中的作用域仅限于当前文件内,在函数或类中可以传递变量。本文还通过示例代码解释了静态变量在函数和类中的使用方法,并说明了静态变量的生命周期与结构体的生命周期相关联。同时,本文还介绍了静态变量在类中的使用方法,并通过示例代码展示了如何在类中使用静态变量。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
author-avatar
萝莉控穿大鞋的胖胖
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有