创建项目和QueryRunner

创建项目:

 

 

 

 数据库的设计

 

 

商品表: goods

列名

类型

说明

备注

id

int

id

主键

name

varchar

名称

 

cover

varchar

封面地址

 

image1

varchar

详情图片1

 

image2

varchar

详情图片2

 

price

floatprice

价格

 

intro

varchar

简介

 

stock

int

库存

 

type_id

int

类目Id

外键

 商品必须属于某一个类目。

类目表: type

列名

类型

说明

备注

id

int

id

主键

name

varchar

名称

 

商品推荐: recommend

列名

类型

说明

备注

id

int

id

主键

type

tinyint

推荐类型(1条幅/2热销/3新品)

 

goods_id

int

产品id

 

 商品表与商品推荐表是一对多的关系:一个商品与对应着多种类型

 

创建c3p0配置文件:

c3p0-config.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
    <!-- 默认配置,只可以出现一次 -->
    <default-config>
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="jdbcUrl">
            <![CDATA[jdbc:mysql://127.0.0.1:3306/cakeshop?useUnicode=true&characterEncoding=UTF-8&useSSL=true]]>
        </property>
        <property name="user">root</property>
        <property name="password">root</property>
    </default-config>
</c3p0-config>

数据库goods的内容:

 

通过出c3p0查询出来的结果:

 

package learning_something;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.sql.DataSource;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class Test {

    public static void main(String[] args) throws SQLException {
        DataSource ds=new ComboPooledDataSource();//使用c3p0的数据源
           
            Connection con=ds.getConnection();
            PreparedStatement ps=con.prepareStatement("select*from goods");
             ResultSet rs=ps.executeQuery();
             while(rs.next()) {
                 System.out.println(rs.getString("name"));
             }
             rs.close();
             ps.close();
             con.close();
        
    }

}
使用c3p0查询的代码.html

 

使用QueryRunner做查询的初步

 

在数据库中id=3的商品信息:

 

 

使用QueryRunner做查询的效果:

 

package learning_something;

import java.sql.SQLException;
import java.util.Map;

import javax.sql.DataSource;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.MapHandler;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class TestQueryRunner {

    public static void main(String[] args) throws SQLException {
        DataSource ds=new ComboPooledDataSource();//使用c3p0的数据源
        
        
        QueryRunner r=new QueryRunner(ds);
        String sql="select* from goods where id=?";
        Map<String,Object> map =r.query(sql, new MapHandler(),3);//查出id=3的商品信息
        for(String key:map.keySet()) {
            
            System.out.println(key+":"+map.get(key));
        }
        

    }

}
使用QueryRunner查询的初步.java

 

 使用QueryRunner做增加、删除和修改操作

使用QueryRunner实现数据库删除

  在一个表中如果 有外键时得需要先删除相关联的外键

没有删除之前数据库的内容:

 

 

 

执行代码删除之后:

显示出的2,表示有2条记录受到了影响

删除了两条11和12

 1 package learning_something;
 2 
 3 import java.sql.SQLException;
 4 import java.util.Map;
 5 
 6 import javax.sql.DataSource;
 7 
 8 import org.apache.commons.dbutils.QueryRunner;
 9 import org.apache.commons.dbutils.handlers.MapHandler;
10 
11 import com.mchange.v2.c3p0.ComboPooledDataSource;
12 
13 public class TestQueryRunner {
14 
15     public static void main(String[] args) throws SQLException {
16         DataSource ds=new ComboPooledDataSource();//使用c3p0的数据源
17         
18         
19         QueryRunner r=new QueryRunner(ds);
20 //        String sql="select* from goods where id=?";
21 //        Map<String,Object> map =r.query(sql, new MapHandler(),3);//查出id=3的商品信息
22 //        for(String key:map.keySet()) {
23 //            
24 //            System.out.println(key+":"+map.get(key));
25 //        }
26         
27         String sql="delete from type where id in(?,?)";
28         int count=r.update(sql,11,12);
29         System.out.println(count);
30         
31         
32 
33     }
34 
35 }
使用QueryRunner实现了删除.jav

 

使用QueryRunner实现数据库更新

 

 我们想把该数据库中的‘节日系列’改为‘生日系列’,其效果如下:

 显示出来的1表示有一行受到影响

数据库经过更新后的结果:

package learning_something;

import java.sql.SQLException;
import java.util.Map;

import javax.sql.DataSource;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.MapHandler;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class TestQueryRunner {

    public static void main(String[] args) throws SQLException {
        DataSource ds=new ComboPooledDataSource();//使用c3p0的数据源
        
        
        QueryRunner r=new QueryRunner(ds);
//        String sql="select* from goods where id=?";
//        Map<String,Object> map =r.query(sql, new MapHandler(),3);//查出id=3的商品信息
//        for(String key:map.keySet()) {
//            
//            System.out.println(key+":"+map.get(key));
//        }
        
//        String sql="delete from type where id in(?,?)";
//        int count=r.update(sql,11,12);
//        System.out.println(count);
        
        
        String sql="update type set name='生日系列' where id=?";
        int count=r.update(sql,8);
        System.out.println(count);
        
        
        

    }

}
使用QueryRunner实现更新.java

 

 

使用QueryRunner实现数据库插入

   

 在使用QueryRunner实现更新时我们把‘节日系列’改为‘生日系列’,那么我们就使用QueryRunner插入‘节日系列’,执行代码后,数据库的内容变为:

 

 表示有一条内容插入数据库中;

 1 package learning_something;
 2 
 3 import java.sql.SQLException;
 4 import java.util.Map;
 5 
 6 import javax.sql.DataSource;
 7 
 8 import org.apache.commons.dbutils.QueryRunner;
 9 import org.apache.commons.dbutils.handlers.MapHandler;
10 
11 import com.mchange.v2.c3p0.ComboPooledDataSource;
12 
13 public class TestQueryRunner {
14 
15     public static void main(String[] args) throws SQLException {
16         DataSource ds=new ComboPooledDataSource();//使用c3p0的数据源
17         
18         
19         QueryRunner r=new QueryRunner(ds);
20 //        String sql="select* from goods where id=?";
21 //        Map<String,Object> map =r.query(sql, new MapHandler(),3);//查出id=3的商品信息
22 //        for(String key:map.keySet()) {
23 //            
24 //            System.out.println(key+":"+map.get(key));
25 //        }
26         
27 //        String sql="delete from type where id in(?,?)";
28 //        int count=r.update(sql,11,12);
29 //        System.out.println(count);
30         
31         
32 //        String sql="update type set name='生日系列' where id=?";
33 //        int count=r.update(sql,8);
34 //        System.out.println(count);
35 //        
36         
37         
38         String sql="insert into type(name) values(?)";
39         int count=r.update(sql,"节日系列");
40         System.out.println(count);
41         
42         
43 
44     }
45 
46 }
使用QueryRunner实现数据库的插入.java

 

 

ArrayHandler和ArrayListHandler处理结果集

goods数据表中的数据:

 

 

使用ArrayHandler只能查询到一组数据:

代码:

 1 package learning_something;
 2 
 3 import java.sql.SQLException;
 4 import java.util.Map;
 5 
 6 import javax.sql.DataSource;
 7 
 8 import org.apache.commons.dbutils.QueryRunner;
 9 import org.apache.commons.dbutils.handlers.ArrayHandler;
10 import org.apache.commons.dbutils.handlers.MapHandler;
11 
12 import com.mchange.v2.c3p0.ComboPooledDataSource;
13 
14 public class TestQueryRunner {
15 
16     public static void main(String[] args) throws SQLException {
17         DataSource ds=new ComboPooledDataSource();//使用c3p0的数据源
18         
19         
20         QueryRunner r=new QueryRunner(ds);
21 
22         String sql="select * from goods";
23         Object[] res=r.query(sql, new ArrayHandler());
24         for(Object o:res) {
25             System.out.println(o);
26         }
27         
28 
29     }
30 
31 }
使用ArrayHandler查询.java

 

 

使用ArrayListHandler可以查询到整个表中的数据:

以查询goods表为例,,其查询的结果如下

 

package learning_something;

import java.sql.SQLException;
import java.util.List;
import java.util.Map;

import javax.sql.DataSource;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ArrayHandler;
import org.apache.commons.dbutils.handlers.ArrayListHandler;
import org.apache.commons.dbutils.handlers.MapHandler;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class TestQueryRunner {

    public static void main(String[] args) throws SQLException {
        DataSource ds=new ComboPooledDataSource();//使用c3p0的数据源
        
        
        QueryRunner r=new QueryRunner(ds);

        
        String sql="select * from goods";
        List<Object[]> list=r.query(sql, new ArrayListHandler());
          for(Object[] objs:list ) {
        for(Object o:objs) {
            System.out.println(o+"");
        }
        System.out.println();
          }
        

    }

}
ArrayListHandler查询.java

 

BeanHandler得到一条记录:

BeanHandler: 把结果集转为一个 Bean, 并返回. Bean 的类型在创建 BeanHandler 对象时以 Class 对象的方式传入,可以进行自行组拼,要求写的属性要与数据库的属性一一对应,并且需要提供空的构造方法。

 

 goods.java

package learning_something;

public class Goods {
    
    private int id;
    private String name;
    private String cover;
    private String image1;
    private String image2;
    private float price;
    private String intro;
    private int stock;
    private int type_id;
    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 String getCover() {
        return cover;
    }
    public void setCover(String cover) {
        this.cover = cover;
    }
    public String getImage1() {
        return image1;
    }
    public void setImage1(String image1) {
        this.image1 = image1;
    }
    public String getImage2() {
        return image2;
    }
    public void setImage2(String image2) {
        this.image2 = image2;
    }
    public float getPrice() {
        return price;
    }
    public void setPrice(float price) {
        this.price = price;
    }
    public String getIntro() {
        return intro;
    }
    public void setIntro(String intro) {
        this.intro = intro;
    }
    public int getStock() {
        return stock;
    }
    public void setStock(int stock) {
        this.stock = stock;
    }
    public int getType_id() {
        return type_id;
    }
    public void setType_id(int type_id) {
        this.type_id = type_id;
    }
    @Override
    public String toString() {
        return "Goods [id=" + id + ", name=" + name + ", cover=" + cover + ", image1=" + image1 + ", image2=" + image2
                + ", price=" + price + ", intro=" + intro + ", stock=" + stock + ", type_id=" + type_id + "]";//进行组拼
    }
    
    

}
Goods.java
 1 package learning_something;
 2 
 3 import java.sql.SQLException;
 4 import java.util.List;
 5 import java.util.Map;
 6 
 7 import javax.sql.DataSource;
 8 
 9 import org.apache.commons.dbutils.QueryRunner;
10 import org.apache.commons.dbutils.handlers.ArrayHandler;
11 import org.apache.commons.dbutils.handlers.ArrayListHandler;
12 import org.apache.commons.dbutils.handlers.BeanHandler;
13 import org.apache.commons.dbutils.handlers.MapHandler;
14 
15 import com.mchange.v2.c3p0.ComboPooledDataSource;
16 
17 public class TestQueryRunner {
18 
19     public static void main(String[] args) throws SQLException {
20         DataSource ds=new ComboPooledDataSource();//使用c3p0的数据源
21         
22         
23         QueryRunner r=new QueryRunner(ds);
24 //        String sql="select* from goods where id=?";
25 //        Map<String,Object> map =r.query(sql, new MapHandler(),3);//查出id=3的商品信息
26 //        for(String key:map.keySet()) {
27 //            
28 //            System.out.println(key+":"+map.get(key));
29 //        }
30         
31 //        String sql="delete from type where id in(?,?)";
32 //        int count=r.update(sql,11,12);
33 //        System.out.println(count);
34         
35         
36 //        String sql="update type set name='生日系列' where id=?";
37 //        int count=r.update(sql,8);
38 //        System.out.println(count);
39 //        
40         
41         
42 //        String sql="insert into type(name) values(?)";
43 //        int count=r.update(sql,"节日系列");
44 //        System.out.println(count);
45 //        
46 //        String sql="select * from goods";
47 //        Object[] res=r.query(sql, new ArrayHandler());
48 //        for(Object o:res) {
49 //            System.out.println(o);
50 //        }
51         
52         
53 //        
54 
55         
56         String sql="select * from goods";
57         Goods goods=r.query(sql, new BeanHandler<Goods>(Goods.class));
58         System.out.println(goods);
59 
60     }
61 
62 }
使用BeanHandler查询.java

 

 

BeanListHandler、MapListHandler、ScalarHandler等其他Handler

BeanListHandler查询表中所有:

由于记录太多,换行输出。

关键代码:

public static void main(String[] args) throws SQLException {
        DataSource ds=new ComboPooledDataSource();//使用c3p0的数据源
        
        
        QueryRunner r=new QueryRunner(ds);
String sql="select * from goods";
        List<Goods> list=r.query(sql, new BeanListHandler<Goods>(Goods.class));
        for(Goods g:list) {
            System.out.println(g);
        }
    

    }

}

 

使用ColumnListHandler进行查询

ColumnListHandler可以查询到表格到某一列所有的内容,例如查询goods表中的所有的商品的名字:

核心代码:

public static void main(String[] args) throws SQLException {
        DataSource ds=new ComboPooledDataSource();//使用c3p0的数据源
        
        
        QueryRunner r=new QueryRunner(ds);
String sql="select * from goods";
        List<Object> list=r.query(sql, new ColumnListHandler<Object>("name"));
        for(Object g:list) {
            System.out.println(g);
        }
    

    }

 

ScalarHandler:只有一个结果集时使用的,可进行统计,例如对goods表中的数据进行统计:

 

 

统计结果:

核心代码:

public static void main(String[] args) throws SQLException {
        DataSource ds=new ComboPooledDataSource();//使用c3p0的数据源
        
        
        QueryRunner r=new QueryRunner(ds);


String sql="select count(*) from goods";
        long count=r.query(sql, new ScalarHandler<Long>());
        System.out.println(count);

    }

 

MapHandler只能得到结果集中的第一条记录:

 

MapListHandler

 

 

 

 

 

  1 package learning_something;
  2 
  3 import java.sql.SQLException;
  4 import java.util.List;
  5 import java.util.Map;
  6 
  7 import javax.sql.DataSource;
  8 
  9 import org.apache.commons.dbutils.QueryRunner;
 10 import org.apache.commons.dbutils.handlers.ArrayHandler;
 11 import org.apache.commons.dbutils.handlers.ArrayListHandler;
 12 import org.apache.commons.dbutils.handlers.BeanHandler;
 13 import org.apache.commons.dbutils.handlers.BeanListHandler;
 14 import org.apache.commons.dbutils.handlers.ColumnListHandler;
 15 import org.apache.commons.dbutils.handlers.MapHandler;
 16 import org.apache.commons.dbutils.handlers.MapListHandler;
 17 import org.apache.commons.dbutils.handlers.ScalarHandler;
 18 
 19 import com.mchange.v2.c3p0.ComboPooledDataSource;
 20 
 21 public class TestQueryRunner {
 22 
 23     public static void main(String[] args) throws SQLException {
 24         DataSource ds=new ComboPooledDataSource();//使用c3p0的数据源
 25         
 26         
 27         QueryRunner r=new QueryRunner(ds);
 28 //        String sql="select* from goods where id=?";
 29 //        Map<String,Object> map =r.query(sql, new MapHandler(),3);//查出id=3的商品信息
 30 //        for(String key:map.keySet()) {
 31 //            
 32 //            System.out.println(key+":"+map.get(key));
 33 //        }
 34         
 35 //        String sql="delete from type where id in(?,?)";
 36 //        int count=r.update(sql,11,12);
 37 //        System.out.println(count);
 38         
 39         
 40 //        String sql="update type set name='生日系列' where id=?";
 41 //        int count=r.update(sql,8);
 42 //        System.out.println(count);
 43 //        
 44         
 45         
 46 //        String sql="insert into type(name) values(?)";
 47 //        int count=r.update(sql,"节日系列");
 48 //        System.out.println(count);
 49 //        
 50 //        String sql="select * from goods";
 51 //        Object[] res=r.query(sql, new ArrayHandler());
 52 //        for(Object o:res) {
 53 //            System.out.println(o);
 54 //        }
 55         
 56         
 57 //        
 58 
 59         
 60 //        String sql="select * from goods";
 61 //        Goods goods=r.query(sql, new BeanHandler<Goods>(Goods.class));
 62 //        System.out.println(goods);
 63         
 64         
 65         
 66 //        String sql="select * from goods";
 67 //        List<Goods> list=r.query(sql, new BeanListHandler<Goods>(Goods.class));
 68 //        for(Goods g:list) {
 69 //            System.out.println(g);
 70 //        }
 71 //    
 72         
 73 //        String sql="select * from goods";
 74 //        List<Object> list=r.query(sql, new ColumnListHandler<Object>("name"));
 75 //        for(Object g:list) {
 76 //            System.out.println(g);
 77 //        }
 78 //    
 79         
 80         
 81         
 82 //        String sql="select count(*) from goods";
 83 //        long count=r.query(sql, new ScalarHandler<Long>());
 84 //        System.out.println(count);
 85         
 86         
 87 //        
 88 //        String sql="select* from goods ";
 89 //    Map<String,Object> map =r.query(sql, new MapHandler());
 90 //        for(String key:map.keySet()) {
 91 //            
 92 //            System.out.println(key+":"+map.get(key));
 93 //        }
 94         
 95         String sql="select* from goods ";
 96         List<Map<String,Object>> list =r.query(sql, new MapListHandler());
 97         for(Map<String,Object> map:list)
 98         for(String key:map.keySet()) {
 99             
100             System.out.println(key+" "+map.get(key)+"");
101     }
102         System.out.println();
103     
104         
105         
106 
107     }
108 
109 }
不同Handler的使用.java

 

posted @ 2019-03-21 17:17  perfect*  阅读(17)  评论(0编辑  收藏  举报
$(function() { $('#cnblogs_post_body img').each(function() { let imgSrc = $(this).attr('src'); let year = parseInt(imgSrc.substr(imgSrc.indexOf('g')+1,4)); if(year >= 2022){ imgSrc += `?watermark/2/text/amlndWl5YW4=/font/5a6L5L2T/fontsize/15/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast`; $(this).attr('src', imgSrc) } }) })