您好,欢迎来到刀刀网。
搜索
您的当前位置:首页JSP存储二进制文件和分页技术

JSP存储二进制文件和分页技术

来源:刀刀网
JSP存储二进制文件和分页技术

1. 文件存储到数据库

将图像以二进制数据格式存储到数据库中,创建bindata的数据表,添加filename(char),binfile(longBlob),当然第一个位置id自动生成,然后创建一个selectImage.jsp页面: <%@ page language=\"java\" import=\"java.util.*\" pageEncoding=\"gb2312\"%> <%

String path = request.getContextPath();

String basePath = request.getScheme()+\"://\"+request.getServerName()+\":\"+request.getServerPort()+path+\"/\"; %>

\">

上传图片

请选择图片的URL:

然后创建一个selectImage.jsp页面,提交图片信息

<%@ page language=\"java\" import=\"java.util.*\" pageEncoding=\"gb2312\"%>

<%@page import=\"java.sql.*\" %> <%@page import=\"java.text.*\" %> <%@page import=\"java.io.*\" %> <%@page import=\"java.nio.*\" %> <%

String path = request.getContextPath();

String basePath = request.getScheme()+\"://\"+request.getServerName()+\":\"+request.getServerPort()+path+\"/\"; %>

\">

存储图片

<%

Class.forName(\"com.mysql.jdbc.Driver\").newInstance(); //加载JDBC驱动程序

String url=\"jdbc:mysql://localhost/firstjsp\"; //firstjsp为数据库的名称

String user=\"root\"; String password=\"lfw123\";

String filename=request.getParameter(\"image\");

filename=\"C:\\\\Documents and Settings\\\\Administrator\\\\桌面\\\\12444033Z-0.jpg\";

//现在的浏览器上传过来的image就只有名字了,没有绝对路径了!!! File file=new File(filename); //获取表单传过来的图片的url try{

out.println(\"这里对吧?\"+filename+\"
\"); //打开文件

FileInputStream fin=new FileInputStream(file); //建一个缓冲保存数据

ByteBuffer nbf=ByteBuffer.allocate((int)file.length()); byte[] array=new byte[1024]; int offset=0, len=0; //读取数据

while((len=fin.read(array))>0 ){

if(len!=1024) nbf.put(array,0,len); else nbf.put(array); offset+=len; }

//新建一个数组保存要写的内容 byte[] content=nbf.array(); //创建数据库连接

out.println(\"content is \"+content+\"
\");

Connection conn=DriverManager.getConnection(url, user, password);

//保存数据

Statement stmt=conn.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);

String sqlstr=\"select * from bindata where filename='02'\"; //查找名字为02的文件

ResultSet rs=stmt.executeQuery(sqlstr); if(rs.next()){

rs.updateBytes(3,content); rs.updateRow(); }else{

//如果没有,添加,已经有更新,注意,第一个位置是自动编号,所以在2,3位置

rs.moveToInsertRow(); rs.updateString(2,\"02\"); rs.updateBytes(3,content); rs.insertRow(); }

rs.close(); fin.close();

out.println(\"恭喜,已经将新的记录成功添加到数据库中!\"); }catch(FileNotFoundException e){ e.printStackTrace(); out.println(\"没找到图片?\"); }catch(IOException e){ e.printStackTrace(); out.println(\"没输入?\"); } %>

最后创建一个showImage.jsp页面,读取图片:

<%@ page language=\"java\" import=\"java.util.*\" pageEncoding=\"gb2312\"%>

<%@page import=\"java.sql.*\" %> <%@page import=\"java.text.*\" %> <%@page import=\"java.io.*\" %> <%

String path = request.getContextPath();

String basePath = request.getScheme()+\"://\"+request.getServerName()+\":\"+request.getServerPort()+path+\"/\"; %>

\">

显示图片

<%

Class.forName(\"com.mysql.jdbc.Driver\"); String url=\"jdbc:mysql://localhost/firstjsp\"; String user=\"root\"; String password=\"lfw123\";

Connection conn=DriverManager.getConnection(url,user,password);

String sql=\"select binfile from bindata where filename='02'\"; Statement stmt=null; ResultSet rs=null; try{

stmt=conn.createStatement(); rs=stmt.executeQuery(sql); }catch(SQLException e){ out.println(\"连接OK?\"); } try{

while(rs.next()){

response.setContentType(\"image/jpg\");

ServletOutputStream sout=response.getOutputStream(); InputStream in=rs.getBinaryStream(1); //获取二进制输入流 byte[] b=new byte[0x7a120]; //创建byte数组用作缓冲 for(int i=in.read(b);i!=-1;){ sout.write(b); //写入页面 in.read(b); //读取数据 }

sout.flush(); sout.close(); }

}catch(Exception e){ out.println(e); } %> 截图:

(long1 vs longpo 转载请注明出处:http://blog.163.com/lfw2565295@126)

(long1 vs longpo 转载请注明出处:http://blog.163.com/lfw2565295@126)

声音,视频也可以二进制数据格式存储到数据库中,方法类似,用到标签等,但这些技术但只是一般的方法,以后能学到更好的

(long1 vs longpo 转载请注明出处:http://blog.163.com/lfw2565295@126)

2. 分页技术

使用游标定位,丢弃不属于页面的数据,使用缓存结果集,一次查询所有数据,使用数据库提供的定位集的SQL语句,返回特定行的数据,使用JavaBean实现, 建立bean包,

然后写个splitPage.java:

package bean; import java.sql.*; import java.util.*; public class splitPage { //定义数据库连接对象和结果集对象 private Connection con=null; private Statement stmt=null; private ResultSet rs=null;

private ResultSetMetaData rsmd=null; //SQL查询语句

private String sqlstr; //总记录数目

private int rowCount=0; //所分页的逻辑页数

private int pageCount=0; //每页显示的记录数目 private int pageSize=0; //设置参数值

public void setCon(Connection con){ this.con=con; if(this.con==null){

System.out.println(\"Failure to get a connection!\"); }else{

System.out.println(\"Success to get a connection!\"); } }

//初始化,获取数据表中的信息

public void initialize(String sql,int pageSize,int ipage){ int irows=pageSize*(ipage-1);

sqlstr=sql;

this.pageSize=pageSize; try{

stmt=this.con.createStatement(); rs=stmt.executeQuery(this.sqlstr); if(rs!=null){ rs.last();

this.rowCount=rs.getRow(); rs.first();

this.pageCount=(this.rowCount-1)/this.pageSize+1; }

this.sqlstr=sql+\" limit \"+irows+\+pageSize; stmt=this.con.createStatement(); rs=stmt.executeQuery(this.sqlstr); rsmd=rs.getMetaData(); }catch(SQLException e){

System.out.println(e.toString()); } }

//将显示结果存到VECTOR集合类中 public Vector getPage(){ Vector vData=new Vector(); try{

if(rs!=null){ while(rs.next()){

String[] sData=new String[6];

for(int j=0; jvData.addElement(sData); } }

rs.close(); stmt.close();

}catch(SQLException e){

System.out.println(e.toString()); }

return vData; }

//获得页面总数

public int getPageCount(){ return this.pageCount; }

//获取数据表中记录总数 public int getRowCount(){ return this.rowCount; } }

建立words数据表,有自动增长的id,有varchar(100)的wtitle,text的wcontent,

datetime的wtime,int的uid,不能为空

words.jsp:

<%@ page language=\"java\" import=\"java.util.*\" pageEncoding=\"gb2312\"%>

<%@page import=\"java.sql.*\" %> <%@page import=\"java.io.*\" %> <%@page import=\"bean.*\" %>

<%

String path = request.getContextPath();

String basePath = request.getScheme()+\"://\"+request.getServerName()+\":\"+request.getServerPort()+path+\"/\"; %>

<%

//每页显示的记录数 int pageSize=3; String sql=\"\"; //当前页

int showPage=1; //数据库用户名,密码

String userName=\"root\"; String password=\"lfw123\";

//数据库的url包括连接数据库所用的编码格式

String url=\"jdbc:mysql://localhost:3306/firstjsp?useUnicode=true&characterEncoding=gb2312\"; //定义连接对象

Connection conn=null; %> <% try{

//加载驱动程序

Class.forName(\"com.mysql.jdbc.Driver\"); //获得数据库的连接对象

conn=DriverManager.getConnection(url,userName,password); }

catch(SQLException e){ //打印出异常信息

out.println(e.toString()); }

//给pages中参数con赋值 pages.setCon(conn);

sql=\"select * from words order by Id\"; //查询数据表,获得查询结果 String strPage=null; //获取跳转到的目的页面

strPage=request.getParameter(\"showPage\"); if(strPage==null){ showPage=1; }else{ try{

showPage=Integer.parseInt(strPage); }catch(NumberFormatException e){ showPage=1; } }

pages.initialize(sql, pageSize, showPage); //获取要显示的数据集合

Vector vData=pages.getPage(); %>

\">

分页显示

留言簿

<%

for(int i=0; iString[] sData=(String[])vData.get(i); %>

<% } %>

编号 留言标题 留言时间
<%=sData[0]%><%=sData[1] %> <% //显示留言时间

String wtime=sData[3]; if(wtime.indexOf(\".\")>-1){

wtime=wtime.substring(0,wtime.indexOf(\".\"));

}

out.println(wtime); %>

<%=pages.getRowCount() %>条 <%=pageSize %>条/页

<%=showPage %>页/共

<%=pages.getPageCount() %>[首页] <%

//判断“上一页”连接是否显示 if(showPage>1){ %>

\" target=\"_self\">[上一页] <% } else { %> [上一页] <% }

//判断“下一页”连接是否显示

if(showPage

\" target=\"_self\">[下一页] <% }else{ %> [下一页]

<% } %>

\" target=\"_self\">[尾页] 转到

<%

//关闭数据库连接 conn.close(); %>

效果:

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- gamedaodao.com 版权所有 湘ICP备2022005869号-6

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务