分页技术与JDBC一览
分页
在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一览相关推荐
- JDBC 学习笔记(一)—— 基础知识 + 分页技术
2019独角兽企业重金招聘Python工程师标准>>> 本文查阅方法: 1.查阅目录 -- 查阅本文目录,确定想要查阅的目录标题 2.快捷"查找" ...
- jsp使用mysql技术分页_JSP分页技术实现
你好,记得你在JavaResearchOrganization上发过的帖子:"JSP分页技术实现"吗? 我看过后觉得很不错,决定采用你的方法了.首先注明的是我是新手,希望一些很低级 ...
- Javaweb分页技术实现
Javaweb分页技术实现 分页技术就是通过SQL语句(如下)来获取数据,具体实现看下面代码 //分页查询语句 select * from 表名 where limit page , count; 和 ...
- mybatis常见分页技术和自定义分页原理实战
文章目录 前言 mybatis简单了解 分页类型 分页方式 1.数组分页 2.数据库分页 3.Rowbounds分页 4.自定义插件分页 自定义分页原理 自定义分页实战 聊下第三方分页插件 pageH ...
- php ajax mysql 分页查询_基于PHP_MySql_Ajax的分页技术方案
一.引言 Ajax的全称是AsynchronousJavaScriptAndXML(异步JavaScript和XML),它不是一项新技术,而是很多成熟的技术的集合. 和Applet,Flash相比,A ...
- java后台分页插件怎么写_Java分页技术(从后台传json到前台解析显示)
0 这是一篇我在初学习过程中,遇到的动态数据分页显示的问题,前台采用Ajax传给后台,后台在访问数据库取出分页数据再转换为json格式传递给前台,前台再解析显示到表格中.在此写出我在做的过程中遇到的问 ...
- Javaweb 第15天 web练习和分页技术
第15天 web练习和分页技术 复习day14内容: 学习新技术的思路? 分析功能的思路? 使用queryRunner操作数据库的步骤? ResultSetHandler接口常用实现类(三个重点)? ...
- 利用自定义分页技术提高数据库性能
利用自定义分页技术提高数据库性能 孟宪会 2002-11-11 14:28:17 Web应用程序是显示数据库中数据的一个非常好的方法,通过它,你可以把业务复杂,并有访问和安全规则的数据库数据以一种简单 ...
- SAP UI 搜索分页技术
搜索分页技术往往和另一个术语Lazy Loading(懒加载)联系起来.今天由Jerry首先介绍S/4HANA,CRM Fiori和S4CRM应用里的UI搜索分页的实现原理.后半部分由SAP成都研究院 ...
最新文章
- v-html解析的相对地址img 显示不出来_人工智能专题作品解析——APPInventor安卓应用开发AI图像识别简单应用...
- 使用深度学习opencv 进行人脸年龄的实时检测
- Android ndk之Check that/ndk/openssl/crypto/libsfk.so exists or that its path is corret
- oracle--存储过程--bai
- 【Win10】【Win2D】实现控件阴影效果
- 浅谈c#变量的命名规则
- 泛型类型(Generic Type)
- Atitit mysql 数据类型 5.7.9 目录 1.1. 数值类型	1 2. 字符串	2 3. 时间日期	2 4. 地理位置	2 5. 几何数据的存储,生成,分析,优化。 空间数据类型(存储)
- 【AI芯片】中国AI芯片爆发,架构创新迫在眉睫
- et中计算机的快捷键,et文件怎么打开,教您怎么打开et文件
- KeilC51基础 改变代码的字体大小
- 用VC++6.0制作简易浏览器(转)
- 国内开源镜像网站汇总
- 一个简单的shell脚本--判断网段主机IP存活情况
- 为什么人到中年就危机了呢?
- 你知道这几种常用的电阻测试方法吗?2021-08-23
- 比较过才知道差别有多大,Win7与Win10,究竟哪个更适合日常使用?
- java 读取excel2007 内存不足_POI处理excel2007内存溢出问题
- kaldi单音素模型训练 - train_mono.sh脚本解读
- 太原计算机编程开发暑期培训班,太原电脑编程少儿培训
热门文章
- Postgres外部表示例
- c语言数据结构对学生信息折半查找,C语言数据结构-折半查找
- c# 批量mqtt_c# mqtt服务器
- linux日志搜索关键词_linux中的实用技巧和快捷键总结
- 最新的ndkr20编译c_NDKr20使用clang编译ffmpeg
- mingus python_【Python图像特征的音乐序列生成】关于mingus一个bug的修复,兼改进情感模型...
- pip安装wxpython报错_Ubuntu 上搭建robotframework
- 基于python的智能安防系统_基于Python语言的智能家居系统研究
- pyqt 实现控件移除_pyqt5:删除树控件(QTreeWidget)的子节点/根节点
- java lucence_Lucence使用入门