开发者社区> 程序界小强> 正文

jdbc_分页查询,大数据,批处理,存储过程

简介: 分页查询 实际上就是每次查询一部分记录,并显示: select * from table_name limit StartIndex, PageSize;——>StartIndex:从第几个记录开始查。
+关注继续查看

分页查询

实际上就是每次查询一部分记录,并显示:

select * from table_name limit StartIndex, PageSize;——>StartIndex:从第几个记录开始查。PageSize:每次查多少记录

//该对象封装了分页查询的配置信息,用于dao层
public class QueryInfo {
    private int startindex;//查询的每页在数据库的起始位置,该值可以根据其他参数计算出,不需要set属性
    private int pagesize = 5;//查询的每页记录数,赋一个初始值
    private int querypage = 1;//查询第几页,赋一个初始值
    //提供get,set方法,便于设置,获取属性值
    public int getStartindex() {
        this.startindex = (this.querypage-1) + 1;
        return startindex;
    }
    public int getPagesize() {
        return pagesize;
    }
    public void setPagesize(int pagesize) {
        this.pagesize = pagesize;
    }
    public int getQuerypage() {
        return querypage;
    }
    public void setQuerypage(int querypage) {
        this.querypage = querypage;
    }
}

//该类封装了分页查询的结果信息,作为中间值,用于给QueryBean提供信息
public class QueryResult {
    private List list;//封装了查询后某页的所有记录
    private int totalrecord;//总记录数,用于给用户提供交互信息
//  提供属性的get,set方法,
    public List getList() {
        return list;
    }
    public void setList(List list) {
        this.list = list;
    }
    public int getTotalrecord() {
        return totalrecord;
    }
    public void setTotalrecord(int totalrecord) {
        this.totalrecord = totalrecord;
    }
}

//该类封装了分页查询的所有信息,用于与用户交互,用于jsp页面,web层
public class QueryBean {
    private List list;//封装查询的所有记录信息
    private int totalrecord;//告诉用户总共有多少记录,可以从QueryResult对象获取
    private int pagesize;//告诉用户每页有多少记录,从QueryInfo对象获取
    private int totalpage;//告诉用户一共有多少页,可以通过totalrecord和pagesize计算
    private int currentpage;//告诉用户当前查看的是第几页,从QueryInfo对象获取
    private int previouspage;//上一页是第几页,通过当前页计算出
    private int nextpage;//下一页是第几页,通过当前页计算出
    private int[] pagebar;//记录页码条,通过currentpage和pagesize计算出的一个数组
//  提供所有属性的get,set方法
    public int getTotalrecord() {
        return totalrecord;
    }
    public void setTotalrecord(int totalrecord) {
        this.totalrecord = totalrecord;
    }
    public int getPagesize() {
        return pagesize;
    }
    public void setPagesize(int pagesize) {
        this.pagesize = pagesize;
    }
    public int getTotalpage() {
//      计算总页数,21条,每页5条,有5页。20条,每页5条,有4页。
        if(this.totalrecord%this.pagesize == 0){
            this.totalpage = this.totalrecord / this.pagesize;
        }else{
            this.totalpage = this.totalrecord / this.pagesize + 1;
        }
        return totalpage;
    }
    public int getCurrentpage() {
        return currentpage;
    }
    public void setCurrentpage(int currentpage) {
        this.currentpage = currentpage;
    }
    public int getPreviouspage() {
        this.previouspage = this.currentpage - 1;
//      如果当前页小于等于0,就指向第一页
        if(this.previouspage<=0){
            this.previouspage = 1;
        }
        return previouspage;
    }
    public int getNextpage() {
        this.previouspage = this.currentpage - 1;
//      如果当前页小于等于0,就指向最后一页
        if(this.nextpage<=0){
            this.nextpage = 1;
        }
        return nextpage;
    }
    public int[] getPagebar() {
        int startindex;
        int endindex;
//      如果总页数小于10
        if(this.pagesize <= 10){
            startindex = 1;
            endindex = this.pagesize;
        }else{
            startindex = this.currentpage - 4;
            endindex = this.currentpage + 5;
//          如果startindex小于1,就从0开始,如果endindex大于总页数,就用总页数作为结束
            if(startindex < 1){
                startindex = 1;
                endindex = 10;
            }
            if(endindex > this.pagesize){
                startindex = this.pagesize - 9;
                endindex = this.pagesize;
            }
        }
//      更具两个索引值定义数组pagebar
        this.pagebar = new int[endindex-startindex+1];
//      为数组赋值
        for (int i = 0; i < pagebar.length; i++) {
            this.pagebar[i] = startindex++;
        }       
        return pagebar;
    }
}

//  在dao层提供一个分页查询的方法,将索引的初始位置和每页记录数传入
    public QueryResult pageQuery(int startIndex, int pageSize){
        Connection conn = null;
        PreparedStatement st = null;
        ResultSet rs = null;
        try {
//          获取数据库连接
            conn = JdbcUtils.getConnection();
//          提供分页查询的sql语句
            String sql = "select * from customer limit ?,?";
//          预编译sql语句,获得preparedstatement对象
            st = conn.prepareStatement(sql);
//          为占位符'?' 赋值
            st.setInt(1, startIndex);
            st.setInt(2, pageSize);
//          执行sql语句,获得结果集
            rs = st.executeQuery();
//          将结果封装到QueryResult对象中
                //在service层,将该对象封装到QueryBean中,传给jsp用于显示
            ...
        } catch (Exception e) {
        }finally{
            JdbcUtils.release(conn, st, rs);
        }
    }

大数据

用处:程序需要将大文本或二进制数据保存到数据库中,一般在实际开发中不直接使用数据库存储大文本大数据,因为在存取操作的时候,会占用连接大量的时间。
大数据(Large Objects):
clob:存储大文本,text文件
blob:存储二进制数据,如图像,音频、二进制文

mysql中用Text代替clob:

Text:Tinytext,text,mediumtext,longtext

blob:tinyblob,blob,mediumblob,longblob

大文本(Text){

存:

PreparedStatement的setCharacterStream( 1, reader, length)方法,填充占位符

//      定义sql语句
        String sql = "insert into testclob(id,resum) values(?,?)";
//      预编译sql
        PreparedStatement st = conn.prepareStatement(sql);
//      赋值占位符
        st.setString(1, "1");
//      不建议用类装载器读取文件,因为文本内容可能太大,不适合读取至内存中
        File file = new File("src/1.txt");
        Reader reader = new FileReader(file);
        st.setCharacterStream(2, reader, file.length());//reader:一个读取文本的流 length:文本的大小
// 

读:

reader = resultSet.getCharacterStream(i);

reader = resultSet.get Clob(i).getCharacterStream();

String s = resultSet.getSting(i);

//      定义sql语句
        String sql = "select * from testclob where id= '1'";
//      预编译sql
        PreparedStatement st = conn.prepareStatement(sql);
//      无占位符直接执行sql
        ResultSet rs = st.executeQuery();
//      通过结果集获取大数据文件
        while(rs.next()){
            String id = rs.getString(1);
//          将数据库的文本数据放在一个流中,供用户使用
            Reader reader = rs.getCharacterStream(2);
//          读取数据
            Writer writer = new FileWriter("src/2.txt");
            ...
        }

二进制(Blob){

 

存:

 

PreparedStatement的setBinaryStream(i, inputStream, length)方法,填充占位符

//      定义sql语句
        String sql = "insert into testblob(id,image) values(?,?)";
//      预编译sql
        PreparedStatement st = conn.prepareStatement(sql);
//      赋值占位符
        st.setString(1, "1");
//      不建议用类装载器读取文件,因为文本内容可能太大,不适合读取至内存中
        File file = new File("src/1.jpg");
        InputStream inputStream = new FileInputStream(file); 
        st.setBinaryStream(2, inputStream, file.length());//inputStream:一个读取文本的流 length:文本的大小
//                                       这是long型的,使用1.6一下的jdk必须将其转成int

读:查看数据不能直接通过命令行程序读取

inputStream = resultSet.getBinaryStream(i);

inputStream = resultSet.getBlob(i).getBinaryStream()

//      定义sql语句
        String sql = "select * from testblob where id= '1'";
//      预编译sql
        PreparedStatement st = conn.prepareStatement(sql);
//      无占位符直接执行sql
        ResultSet rs = st.executeQuery();
//      通过结果集获取大数据文件
        while(rs.next()){
            String id = rs.getString(1);
//          将数据库的文本数据放在一个流中,供用户使用
            InputStream in = rs.getBinaryStream(2);
//          存储数据
            OutputStream out = new FileOutputStream("c:\\2.jpg");


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
C#使用linq查询大数据集的方法
这篇文章主要介绍了C#使用linq查询大数据集的方法,涉及C#调用linq进行数据查询的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
32 0
大话存储系列7——文件系统和IO处理流程
1、文件系统 在早期的计算机系统中,每个程序都必须自己管理磁盘,在磁盘中放自己的数据,程序需要直接和磁盘控制器打交道。有多少个程序要利用磁盘,就有多少个磁盘交互启动接口。
1125 0
HDFS 是如何实现大数据高容量、可靠的存储和访问的。
大数据数据量大、类型多种多样、快速的增长等特性,那么HDFS是如何去解决大数据存储、高可用访问的了?
175 0
JDBC判断数据库查询结果集是否为空
通常来说都是用rs.next()来判断结果集是否为空,但是由于执行rs.next()后指针指向的是结果集中的第一条记录,此时再用while(rs.next())取结果集中的数据就会导致第一条数据无法得到。
870 0
《大数据存储:MongoDB实战指南》一导读
多年来,我一直在和数据库存储技术打交道,深知数据存储技术在整个IT系统中起着至关重要的作用,尤其是随着云计算时代的到来,所有企业都面临着海量的数据信息,如何处理这些数据成为当前研究的热点。在过去二十几年中,数据的存储是关系数据库的天下,它以高效、稳定、支持事务的优势几乎统治了整个行业的存储业务;但是随着互联网的发展,许多新兴产业如社交网络、微博、数据挖掘等业务快速增长,数据规模变得越来越庞大,高效存储、检索、分析这些海量的数据,关系数据库变得不再适用。
1838 0
+关注
程序界小强
一个不仅仅会写代码的码农。。。
122
文章
1
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载