分页

在MySQL中提供了对数据库分页的支持:

select id,name from customer limit 0,5;

前面的数字表示从第几个位置,后面的数字表示获取的数据多少。

表示在customer表中获取从第0个位置开始的五条数据。

理解:将一个页面分成两个或两个以上的页面,以便实现数据的合理化显示。

效果显示:

分页的页面显示数据流程图:

用户将自己想看的页面数据请求发送给servlet,servlet将请求(查询信息)封装到一个对象(QueryInfo)中交给service来处理,service拿到用户的请求(QueryInfo),去调用dao层,让dao层来查询数据库中的信息,从数据库中拿到查询后的数据封装到一个QueryResult中,这样service就拿到了数据库中用户想看的数据信息。这时生成一个PageBean对象,其中封装着需要在jsp页面中的所有需要的一切。最后由service将PageBean中封装的数据带给servlet,servlet再交给jsp页面显示。

查看演示效果:

过程步骤,先写好所要封装数据JavaBean(queryinfo,queryresult,pagebean),然后来改造dao,后改造service,再改造servlet。

分页细节处理:

1.当分的页码过多时处理方案:

实现页码的固定,将固定多的页码显示在页面上,并且在动态显示页码条的大小:

解决代码如下:

 1 //显示固定长度的页码条
 2     public int[] getPagebar() {
 3         int startpage;
 4         int endpage;
 5         int pagebar[]=null;
 6         if(this.totalpage<=10){
 7             pagebar=new int[this.totalpage];
 8             startpage=1;
 9             endpage=this.totalpage;
10         }else{
11          pagebar=new int[10];
12             startpage=this.currentpage-4;
13             endpage=this.currentpage+5;
14             if(startpage<1){
15                 startpage=1;
16                 endpage=10;
17             }
18                 if(endpage>this.totalpage){
19                     startpage=this.totalpage-9;
20                     endpage=this.totalpage;
21                 }
22         }
23         int index=0;
24         for(int i=startpage;i<=endpage;i++){
25             pagebar[index++]=i;
26         }
27     this.pagebar=pagebar;
28     return this.pagebar;
29     //显示所有的页码条
30 //        int pagebar[]=new int[this.totalpage];
31 //        for(int i=1;i<+this.totalpage;i++){
32 //            pagebar[i-1]=i;//?
33 //        }
34 //        this.pagebar=pagebar;
35 //        return pagebar;
36     }

实现的效果:

2.实现当点击页码时所点击的页码变色。

1  </c:if>
2  <!-- 迭代页码条 -->
3  <c:forEach var="pagenum" items="${pagebean.pagebar}" >
4  <!-- 利用if条件判断让当前所在的页码变色 -->
5  <c:if test="${pagenum==pagebean.currentpage}">
6  <font color="red"> ${pagenum}</font>
7  

3.当修改每页数据显示大小时,可以改变数据在页面的显示大小。

代码参考listcustomer.jsp中的gotopage方法。

4.实现功能GO直接跳转到想去的页面。

代码参考listcustomer.jsp中的gotopage方法。

JDBC技术深入:

1.使用JDBC大数据:

使用JDBC处理大文本(字符):

对于MYSQL中的Text类型,可以调用如下的方法设置:

PreparedStatement.setCharacterStream(index,reder,length);

注意length长度需设置,并且设置为int型。

对于MYSQL中的Text类型,可调用如下方法获取:

reder=resultSet.getCharacterSteam(i);

reder=resultSet.getClob(i).getCharcaterStream();

string s=resultSet.getString(i);

练习代码如下:

 1 package cn.itcast.demo;
 2
 3 import java.io.File;
 4 import java.io.FileNotFoundException;
 5 import java.io.FileReader;
 6 import java.sql.Connection;
 7 import java.sql.PreparedStatement;
 8 import java.sql.ResultSet;
 9 import java.sql.SQLException;
10
11 import org.junit.Test;
12
13 import cn.itcast.utils.JdbcUtils;
14
15 public class Demo1 {
16     /*
17      * 读写大文本
18      *
19      create table testclob
20      (
21        id varchar(40) primary key,
22        resume text
23        );
24      *
25      *
26      */
27
28     @Test
29 public void insert() throws SQLException, FileNotFoundException{
30     Connection conn=null;
31     PreparedStatement  st= null;
32     ResultSet rs=null;
33   try{
34       conn= JdbcUtils.getconnection();
35       String sql="insert into testclob(id,resume) values(?,?)";
36       st=conn.prepareStatement(sql);
37       st.setString(1, "1");
38
39       File file=new File("src/1.txt");
40       FileReader reader=new FileReader(file);
41       st.setCharacterStream(2, reader, (int)file.length());
42     int num=  st.executeUpdate();
43       if(num>0){
44           System.out.println("插入成功!!");
45
46       }
47   }finally{
48       JdbcUtils.relesase(conn, st, rs);
49
50
51   }
52
53 }
54
55 }

使用JDBC来处理二进制的数据(字节):

代码如下:

 1 package cn.itcast.demo;
 2
 3 import java.io.File;
 4 import java.io.FileInputStream;
 5 import java.io.FileNotFoundException;
 6 import java.io.FileOutputStream;
 7 import java.io.IOException;
 8 import java.io.InputStream;
 9 import java.io.OutputStream;
10 import java.sql.Connection;
11 import java.sql.PreparedStatement;
12 import java.sql.ResultSet;
13 import java.sql.SQLException;
14
15 import org.junit.Test;
16
17 import cn.itcast.utils.JdbcUtils;
18
19 public class Demo2 {
20
21     /*
22      create table testblob
23      (
24      id varchar(40) primary key,
25      image blob
26      );
27      *
28      * */
29     @Test//大字节数据写入数据库中
30     public void insert() throws SQLException, FileNotFoundException{
31         Connection conn=null;
32         PreparedStatement  st= null;
33         ResultSet rs=null;
34       try{
35           conn= JdbcUtils.getconnection();
36          String sql="insert into testblob(id,image) values(?,?) ";
37          st= conn.prepareStatement(sql);
38          st.setString(1, "1");
39          File file =new File("src/1.jpg");
40          FileInputStream in=new FileInputStream(file);
41
42     st.setBinaryStream(2, in, file.length());
43          st.executeUpdate();
44       }finally{
45           JdbcUtils.relesase(conn, st, rs);
46
47
48       }
49     }
50     @Test//将写入数据库的数据写到磁盘中加以显示
51     public void read() throws SQLException, IOException{
52         Connection conn=null;
53         PreparedStatement  st= null;
54         ResultSet rs=null;
55       try{
56           conn= JdbcUtils.getconnection();
57          String sql="select id ,image from testblob where id='1'";
58             rs= conn.prepareStatement(sql).executeQuery();
59             if(rs.next()){
60                 InputStream in=rs.getBinaryStream("image");
61                 OutputStream out=new FileOutputStream("d:\\1.jpg");
62
63                 try {
64                     int len = 0;
65                     byte buffer[] = new byte[1024];
66                     while ((len = in.read(buffer)) > 0) {
67                         out.write(buffer, 0, len);
68                     }
69                 } finally {
70                     if (in != null)
71                         in.close();
72                     if (out != null)
73                         out.close();
74                 }
75             }
76
77       }finally{
78           JdbcUtils.relesase(conn, st, rs);
79
80
81       }
82     }
83
84 }

使用JDBC进行批处理:

第一种方式:

第二种方式:

采用PreparedStatement,addBatch()进行批处理

两种方式代码如下:

 1 package cn.itcast.demo;
 2
 3 import java.sql.Connection;
 4 import java.sql.PreparedStatement;
 5 import java.sql.ResultSet;
 6 import java.sql.SQLException;
 7 import java.sql.Statement;
 8
 9 import org.junit.Test;
10
11 import cn.itcast.utils.JdbcUtils;
12
13 public class Demo3 {
14 /*
15  create table testbatch
16  (
17  id varchar(40) primary key,
18  name varchar(40)
19  );
20  *
21  */
22     @Test//实现批处理的第一种方式。可以插入多种不同的sql语句。
23     public void test() throws SQLException{
24         Connection conn=null;
25     Statement  st= null;
26         ResultSet rs=null;
27       try{
28           conn= JdbcUtils.getconnection();
29           String sql1="insert into testbatch(id,name) values('1','aaa')";
30           String sql2="update testbatch set name='bbb' where id='1'";
31             st=  conn.createStatement();
32             st.addBatch(sql1);
33             st.addBatch(sql2);
34             //int[]返回的是一个列表,其中存储着sql语句。
35             st.executeBatch();
36             st.clearBatch();
37
38       }finally{
39           JdbcUtils.relesase(conn, st, rs);
40
41
42       }
43     }
44
45     @Test//实现批处理的第二种方式。//适合做批量插入或批量更新。
46     public void test2() throws SQLException{
47
48         Connection conn=null;
49         PreparedStatement  st= null;
50             ResultSet rs=null;
51           try{
52               conn= JdbcUtils.getconnection();
53               String sql= "insert into testbatch(id,name) values(?,?)";
54             st=  conn.prepareStatement(sql);
55             for(int i=1;i<=10;i++){
56                 st.setString(1, i+"");
57                 st.setString(2, "aa"+i);
58                 st.addBatch();
59                 //当存入的数据过多时采用分组处理将1000条作为一此处理。
60 //                if(i%1000==0){
61 //                    st.executeBatch();
62 //                    st.clearBatch();
63 //                }
64
65             }
66             st.executeBatch();
67           }finally{
68               JdbcUtils.relesase(conn, st, rs);
69
70
71           }
72     }
73
74
75
76 }

获取数据库自动生成的主键:

JDBC调用存储过程:

相当于一个Java方法,只不过是属于数据库中方法。

数据处理的两种方法:一是直接在Java中调取数据库中的存储过程,来获取并处理数据。

二是在Java中通过JDBC来写方法来处理数据库中的数据。

存储过程的优点:不必向外界暴露过多的信息。确保信息的安全性。

可以直接被Java程序调用简化了代码。

1 delimiter $$ //分隔符 //创建一个存储过程
2 CREATE PROCEDURE demoSp(IN inputParam VARCHAR(255), INOUT inOutParam varchar(255) )
3 BEGIN
4     SELECT CONCAT('zyxw---',inputParam) into inOutParam;
5 END $$
6 delimiter ;

存储过程代码如下:

package cn.itcast.demo;import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;import cn.itcast.utils.JdbcUtils;public class Demo5 {//调用存储过程public static void main(String[] args) throws SQLException {//获取JDBC驱动
        Connection conn=null;CallableStatement  st= null;ResultSet rs=null;try{conn= JdbcUtils.getconnection();//获取调用过程的名称
             st= conn.prepareCall("{call demoSp(?,?)}");st.setString(1,"aaaaaa");//将获取的数据类型设置为字符型st.registerOutParameter(2, Types.VARCHAR);st.execute();System.out.println( st.getString(2));}finally{JdbcUtils.relesase(conn, st, rs);}}}                        

补充:结果集ResultSet:

实现对结果集的滚动。

转载于:https://www.cnblogs.com/shuai9999/p/9105055.html

分页技术与JDBC一览相关推荐

  1. JDBC 学习笔记(一)—— 基础知识 + 分页技术

    2019独角兽企业重金招聘Python工程师标准>>> 本文查阅方法:     1.查阅目录 -- 查阅本文目录,确定想要查阅的目录标题     2.快捷"查找" ...

  2. jsp使用mysql技术分页_JSP分页技术实现

    你好,记得你在JavaResearchOrganization上发过的帖子:"JSP分页技术实现"吗? 我看过后觉得很不错,决定采用你的方法了.首先注明的是我是新手,希望一些很低级 ...

  3. Javaweb分页技术实现

    Javaweb分页技术实现 分页技术就是通过SQL语句(如下)来获取数据,具体实现看下面代码 //分页查询语句 select * from 表名 where limit page , count; 和 ...

  4. mybatis常见分页技术和自定义分页原理实战

    文章目录 前言 mybatis简单了解 分页类型 分页方式 1.数组分页 2.数据库分页 3.Rowbounds分页 4.自定义插件分页 自定义分页原理 自定义分页实战 聊下第三方分页插件 pageH ...

  5. php ajax mysql 分页查询_基于PHP_MySql_Ajax的分页技术方案

    一.引言 Ajax的全称是AsynchronousJavaScriptAndXML(异步JavaScript和XML),它不是一项新技术,而是很多成熟的技术的集合. 和Applet,Flash相比,A ...

  6. java后台分页插件怎么写_Java分页技术(从后台传json到前台解析显示)

    0 这是一篇我在初学习过程中,遇到的动态数据分页显示的问题,前台采用Ajax传给后台,后台在访问数据库取出分页数据再转换为json格式传递给前台,前台再解析显示到表格中.在此写出我在做的过程中遇到的问 ...

  7. Javaweb 第15天 web练习和分页技术

    第15天 web练习和分页技术 复习day14内容: 学习新技术的思路? 分析功能的思路? 使用queryRunner操作数据库的步骤? ResultSetHandler接口常用实现类(三个重点)? ...

  8. 利用自定义分页技术提高数据库性能

    利用自定义分页技术提高数据库性能 孟宪会 2002-11-11 14:28:17 Web应用程序是显示数据库中数据的一个非常好的方法,通过它,你可以把业务复杂,并有访问和安全规则的数据库数据以一种简单 ...

  9. SAP UI 搜索分页技术

    搜索分页技术往往和另一个术语Lazy Loading(懒加载)联系起来.今天由Jerry首先介绍S/4HANA,CRM Fiori和S4CRM应用里的UI搜索分页的实现原理.后半部分由SAP成都研究院 ...

最新文章

  1. v-html解析的相对地址img 显示不出来_人工智能专题作品解析——APPInventor安卓应用开发AI图像识别简单应用...
  2. 使用深度学习opencv 进行人脸年龄的实时检测
  3. Android ndk之Check that/ndk/openssl/crypto/libsfk.so exists or that its path is corret
  4. oracle--存储过程--bai
  5. 【Win10】【Win2D】实现控件阴影效果
  6. 浅谈c#变量的命名规则
  7. 泛型类型(Generic Type)
  8. Atitit mysql 数据类型 5.7.9 目录 1.1. 数值类型 1 2. 字符串 2 3. 时间日期 2 4. 地理位置 2 5. 几何数据的存储,生成,分析,优化。 空间数据类型(存储)
  9. 【AI芯片】中国AI芯片爆发,架构创新迫在眉睫
  10. et中计算机的快捷键,et文件怎么打开,教您怎么打开et文件
  11. KeilC51基础 改变代码的字体大小
  12. 用VC++6.0制作简易浏览器(转)
  13. 国内开源镜像网站汇总
  14. 一个简单的shell脚本--判断网段主机IP存活情况
  15. 为什么人到中年就危机了呢?
  16. 你知道这几种常用的电阻测试方法吗?2021-08-23
  17. 比较过才知道差别有多大,Win7与Win10,究竟哪个更适合日常使用?
  18. java 读取excel2007 内存不足_POI处理excel2007内存溢出问题
  19. kaldi单音素模型训练 - train_mono.sh脚本解读
  20. 太原计算机编程开发暑期培训班,太原电脑编程少儿培训

热门文章

  1. Postgres外部表示例
  2. c语言数据结构对学生信息折半查找,C语言数据结构-折半查找
  3. c# 批量mqtt_c# mqtt服务器
  4. linux日志搜索关键词_linux中的实用技巧和快捷键总结
  5. 最新的ndkr20编译c_NDKr20使用clang编译ffmpeg
  6. mingus python_【Python图像特征的音乐序列生成】关于mingus一个bug的修复,兼改进情感模型...
  7. pip安装wxpython报错_Ubuntu 上搭建robotframework
  8. 基于python的智能安防系统_基于Python语言的智能家居系统研究
  9. pyqt 实现控件移除_pyqt5:删除树控件(QTreeWidget)的子节点/根节点
  10. java lucence_Lucence使用入门