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");


相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
相关文章
|
6月前
|
SQL Java 大数据
Hive实战(03)-深入了解Hive JDBC:在大数据世界中实现数据交互
Hive实战(03)-深入了解Hive JDBC:在大数据世界中实现数据交互
200 1
|
6月前
|
SQL 前端开发 Java
大数据平台底层技术-JAVA篇-如何动态加载不同版本的 HIVE JDBC 驱动 - 一文读懂JAVA的类加载机制 1
大数据平台底层技术-JAVA篇-如何动态加载不同版本的 HIVE JDBC 驱动 - 一文读懂JAVA的类加载机制
|
6月前
|
SQL 安全 Java
开启 Kerberos 安全认证的大数据环境中如何正确指定 HS2 的 jdbc url 地址?
开启 Kerberos 安全认证的大数据环境中如何正确指定 HS2 的 jdbc url 地址?
|
6月前
|
SQL Java 大数据
大数据平台底层技术-JAVA篇-如何动态加载不同版本的 HIVE JDBC 驱动 - 一文读懂JAVA的类加载机制 2
大数据平台底层技术-JAVA篇-如何动态加载不同版本的 HIVE JDBC 驱动 - 一文读懂JAVA的类加载机制
|
2月前
|
SQL druid Java
JDBC技术【分页查询、数据库连接池、应用程序分层、封装通用的BaseDao】(四)-全面详解(学习总结---从入门到深化)
JDBC技术【分页查询、数据库连接池、应用程序分层、封装通用的BaseDao】(四)-全面详解(学习总结---从入门到深化)
29 0
|
3月前
|
SQL Java 数据库连接
JDBC技术【分页查询、数据库连接池、应用程序分层、封装通用的BaseDao】(四)-全面详解(学习总结---从入门到深化)(下)
JDBC技术【分页查询、数据库连接池、应用程序分层、封装通用的BaseDao】(四)-全面详解(学习总结---从入门到深化)
336 1
|
3月前
|
SQL Java 数据库连接
JDBC技术【分页查询、数据库连接池、应用程序分层、封装通用的BaseDao】(四)-全面详解(学习总结---从入门到深化)(中)
JDBC技术【分页查询、数据库连接池、应用程序分层、封装通用的BaseDao】(四)-全面详解(学习总结---从入门到深化)
28 0
|
5月前
|
存储 分布式计算 大数据
大数据处理平台的架构演进:从批处理到实时流处理
大数据处理平台的架构演进:从批处理到实时流处理
103 0
|
7月前
|
SQL Java 关系型数据库
[Mysql]JDBC篇, DAO, DBUtils, 批处理, 数据库池
面向接口编程是一种抽象的, 高效的编程思想 (就像Java里面的多态的思想. 解耦合) 解耦合 : 降低程序的耦合度(乐高坏了只需要换一个零件, 不香?), 提高程序的扩展力(比如多态) SUN公司写了一个接口 各大厂商对这个接口进行实现 这个接口实现了"多态"的编程思想 面向接口编程的程序员只需要调用JDBC即可 底层的实现是厂商写的代码, 程序员也不用去关心 厂商写的实现接口的.class文件, 也是驱动(Driver) 数据库驱动都是以.jar包的形式存在, .jar包当中有很多.class文件, 它们实现了JDBC接口
|
8月前
|
SQL Java 数据库连接
Java JDBC中的批处理SQL语句的详解
Java JDBC中的批处理SQL语句的详解
85 0

热门文章

最新文章