javaweb数据库操作

本文主要内容有C3P0数据库连接池,dbutils的使用,元数据的应用

在对数据库进行增删改查时,使用数据库连接池可以有效的提高效率,节省资源,C3P0是Apache组织提供的一个有效方式

C3P0的XML配置文件,文件名必须c3p0config.xml,路径必须与类相同

<?xml version="1.0" encoding="utf-8"?>
<c3p0-config>
  <default-config>
    <property name="driverClass">com.mysql.jdbc.Driver</property>
    <property name="jdbcUrl">jdbc:mysql:///estore</property>
    <property name="user">estore</property>
    <property name="password">estore</property>
  </default-config>
</c3p0-config>

以上分别为设置JDBC,数据库名称,用户名和密码,注意文件名是固定的,必须导入C3P0的jar包

数据库连接类的书写

public class DaoUtils {
    private static DataSource source = new ComboPooledDataSource();
    private DaoUtils() {
    }

    public static DataSource getSource(){
        return source;
    }

    public static Connection getConn(){
        try {
            return source.getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }
}

以上提供了两个静态方法,分别返回数据源和连接

利用DBUtils对数据库的增删改查,需要导入Commons-dbutils.jar

插入数据

public class OrderDaoImpl implements OrderDao {

    @Override
    public void addOrder(Order order) {
        // TODO 自动生成的方法存根
        String sql = "insert into orders values (?,?,?,?,null,?)";
        try {
            QueryRunner runner=new QueryRunner(DaoUtils .getSource());
            runner.update(sql,order.getId(),order.getMoney(),order.getReceiverinfo(),order.getPaystate(),order.getUser_id());
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }

删除数据

public void delOrderItem(String id) {
        // TODO 自动生成的方法存根
        String sql="delete from orderitem where order_id = ?";
        try {
            QueryRunner runner = new QueryRunner(DaoUtils .getSource());
            runner.update(sql,id);

        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
            throw new RuntimeException(e);
        }

    }

更新修改数据

public void updateState(int id) {
        // TODO 自动生成的方法存根
        String sql = "update users set state = 1 where id=?";
        try{
            QueryRunner runner = new QueryRunner(DaoUtils .getSource());
            runner.update(sql,id);
        }catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }   

    }

查找数据,查找数据可以分为查找单个数据和查找列表数据,其中分别用BeanHandler接口与BeanListHandler接口实现

BeanHandler

public Order findOrderById(String p2_Order) {
        // TODO 自动生成的方法存根
        String sql = "select * from orders where id = ?";
        try{
            QueryRunner runner = new QueryRunner(DaoUtils .getSource());
            return runner.query(sql, new BeanHandler<Order>(Order.class),p2_Order);
        }catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }

BeanListHandler

public List<SaleInfo> saleList() {
        // TODO 自动生成的方法存根
        String sql = 
                " select products.id prod_id,products.name prod_name,sum(orderitem.buynum ) sale_num"+
                " from orders ,orderitem ,products "+
                " where "+
                " orders.id=orderitem.order_id "+
                " and "+
                " orderitem.product_id=products.id"+
                " and orders.paystate = 1"+
                " group by products.id"+
                " order by sale_num desc";

        try{
            QueryRunner runner  = new QueryRunner(DaoUtils .getSource());
            return runner.query(sql, new BeanListHandler<SaleInfo>(SaleInfo.class));
        }catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }

元数据

当在JSP与Servlet中传递的参数过多时,元数据配合javabean可以有效的简化书写

//封装数据较验数据
        User user=new User();
        BeanUtils.populate(user, request.getParameterMap());
        user.setPassword(MD5Utils.md5(user.getPassword()));

需要导入commons-beanutils.jar

javaweb数据库的基本操作完成

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值