首 页 网络编程
网页制作 图形图象 操作系统 冲浪宝典
软件教学 认证考试

网络安全 网络办公 行业资讯 评测对比
您当前位置:站长天空 -> 网络编程-> JSP教程
一个Jsp初学者的学习过程(七)-JSP教程,Jsp/Servlet
作者:网友供稿 点击:37
推荐
西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!可在线rar解压,自动数据恢复设置虚拟目录等.免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金
站内搜索
文章页数:[1] 
一个jsp初学者的学习过程(七)

theunforgiven


第七章 超长文本的操作——clob类型数据的存取

回到我编写留言板的时候,当时要存放留言板的正文内容,发现varchar2()(可变长度的字符串)只能存4000字节,也就是2000个汉字,这也太少了啊,查一下数据库类型的资料,发现有这么几个类型:long,2g(要是我没记错的话,它是为了向前兼容,不推荐使用);clob,4g,字符;blob,4g,二进制。看来超长文本应该使用clob了,图片自然是用blob了,询问了一下别人,知道这两种类型是不能像varchar2()那样直接存的,只好作罢,先用varchar2()顶一阵。
后来我终于有空了,决心要完成这个任务,在网上查了一番资料,看了别人的例子,总算是无师自通看明白了:存的时候需要使用empty_clob()(这个不是java的函数)先存一个空的标识(用我的理解就是先初始化一下),然后通过“流”将数据写入。下面是代码,其中try里面的是clob类型的存操作:
-----------------------------------save_new.jsp------------------------------------------
<%@ include file="include.inc"%>
<%@ page contenttype="text/html;charset=gb2312" errorpage="request_error.htm"%>
<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head>
<body>
<%
string title = request.getparameter("title");
string kind=request.getparameter("kind");
string newtitle=title.replaceall("","");//用replaceall()将text字串中所有的单引号改成连续两个单引号

string text = request.getparameter("text");
//string text1=text.replaceall("","");存clob时不需将单引号改成连续两个单引号
string text2=text.replaceall("<","&lt");//用replaceall()将字串中所有的<改成&lt
string newtext=text2.replaceall(">","&gt");//用replaceall()将字串中所有的>改成&gt
//replace只能处理单个字符!!
//改是为了不影响数据库的查询语句
//改<>是防止网页把他们生成标签,比如:<table>,<form>等
string author=session.getattribute("name").tostring();
out.println(author);
long id=system.currenttimemillis();//取得一个时间,从1970-1-1 0:00:00开始到当前时间的毫秒数,用这个数作为该文章的id标识
java.text.simpledateformat formatter = new java.text.simpledateformat("yyyy-mm-dd hh:mm:ss"); //格式化日期
java.util.date currenttime_1 = new java.util.date();//得到当前系统时间
string strdate = formatter.format(currenttime_1); //将日期时间转换成字符串形式

connection con = null;
preparedstatement stmt = null;//不能用statement,我也不知道为什么,查了api,说这个preparedstatement可以用于
//高效的多次执行语句,没查到statement这个类
resultset rs = null;
try
{
class.forname(classforname);//载入驱动程式类别
con=drivermanager.getconnection(servanddb);//建立数据库连接
con.setautocommit(false);//设置不自动提交
string sql="insert into article(id,author,title,time,kind,text_clob) values ("+id+","+author+","+newtitle+","+strdate+","+kind+",empty_clob())";//我的数据库中存文本的clob型字段名为:text_clob
stmt=con.preparestatement(sql);//添加一条clob字段为空的记录,
stmt.executeupdate();//执行
stmt=null;//下次使用前清空
sql="select text_clob from article where id="+id+" for update";//正是由于这条语句,id这个标识就必须得唯一!!!!
//如果数据库中已有一条记录的id与当前的id值相同,那么会查到那条记录,也就无法向新插入的记录中的clob字段进行写入!
stmt=con.preparestatement(sql);//查找刚刚添加的那条记录
rs=stmt.executequery();

oracle.sql.clob osc = null;//初始化一个空的clob对象
if (rs.next())
osc=(oracle.sql.clob)rs.getclob("text_clob");
writer w=osc.getcharacteroutputstream();//使用字符输出流
w.write(newtext);//将字符串str_text写到流中
w.flush();//输出流中数据,大概是正式向clob中写了
w.close();
con.commit();//执行
response.sendredirect("index.jsp?page=1");//回主页面
}
catch(exception e)
{out.println(e);}
finally
{
if (rs!=null)
rs.close();
if (stmt!=null)
stmt.close();
if (con!=null)
con.close();
}
%>
</body>
</html>
--------------------------------------------------------------------------
取的时候就相对简单了,主要就两句,看下面的代码:
--------------------------------------------------------------------------
<%
connection con = null;
statement stmt = null;
resultset rs = null;
long id=long.parselong(request.getparameter("id"));//将接收到的字符串转成long型
try
{
class.forname(classforname);//载入驱动程式类别
con=drivermanager.getconnection(servanddb);//建立数据库连接
stmt=con.createstatement();
string sql="select * from article where id="+id+"";
rs=stmt.executequery(sql);
if (rs.next())
{ //下2行是用于从clob类型里读数据的,转成字符串。
oracle.sql.clob osc=(oracle.sql.clob)rs.getclob("text_clob");//我的数据库中存文本的clob型字段名为:text_clob
string str_text=osc.getsubstring((long)1,(int)osc.length());//substring是截取字符串(从1截到length),如果用 osc.getstring的话出错。
out.print(str_text);
}//if
}//try
catch(exception e){}
rs.close();
stmt.close();
con.close();
%>
--------------------------------------------------------------------------
现在对clob类型的存取问题已经解决,但是当你操作文本字符串的时候你会发现很多问题,比如说,文本里有单引号()、标签(如<table>、<br>),还有回车和空格的问题等等,都需要你在实践中发现并解决。
下一章说说blob。


文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

文章页数:[1] 


放大字体显示 缩小字体显示 打印文章 推荐给朋友
热门文章
·利用 Java Web Start发布你用java程序-JSP教程,Java技巧及代码
·用正则表达式得到网页上的链接-.NET教程,评论及其它
·MSMQ,Enterprise Service, DotNet Remoting,Web Service 的优缺点-.NET教程,Web Service开发
·用vb编一个计算器,需要用到数组,看看下面的代码,欢迎来找碴!-.NET教程,VB.Net语言
·jsp页面中的下载功能实现-JSP教程,Jsp/Servlet
·利用Java 创建和读取Excel文档-JSP教程,Java技巧及代码
·JSP语法(8)——<jsp:forward>-JSP教程,Jsp/Servlet
·Hibernate 配置!-JSP教程,资料/其它
·java、J2EE基础问题汇总-JSP教程,Java技巧及代码
·Java手机程序设计入门 电子书开放下载(转自CSDN)-JSP教程,J2ME开发
最新文章
·photoshop制作重彩风格非主流照片效果_photoshop教程
·google补充材料没消失,内链优化很重要_seo网站优化
·个人网站建设到底怎样赚钱_网赚技巧
·英文垃圾站全功略ip日100月赚50刀_网赚技巧
·清客讲网赚思路_网赚技巧
·windear与渡虎谷密谋_站长访谈
·口碑网ceo李治国专访:独特的平衡之道_站长访谈
·密密麻麻圈网邵晨:我从“互动”中赚钱_站长访谈
·蔡文胜:站长的乐趣是享受建站的过程_站长访谈
·“鹰”之路—访著名linux内核程序员大鹰_站长访谈
相关主题
  • 一个Jsp初学者的学习过程(八)-JSP教程,Jsp/Servlet
  • 一个Jsp初学者的学习过程(六)-JSP教程,Jsp/Servlet
  • 一个Jsp初学者的学习过程(五)-JSP教程,Jsp/Servlet
  • 一个Jsp初学者的学习过程(四)-JSP教程,Jsp/Servlet
  • 一个Jsp初学者的学习过程(三)-JSP教程,Jsp/Servlet
  • 西部数码虚拟主机

    友情链接
    CNNIC 西部数码
    万网 自助建站
    虚拟主机 asp空间
    域名注册 域名
    域名申请 主页空间
    论坛空间 网站空间
    国际域名 虚拟空间
    空间租用 DDOS防火墙
    成都主机托管 四川主机托管
    主机租用 服务器租用
    网站目录 自助建站
    虚拟主机 网址大全
    软件下载
    自助链接
    虚拟主机资讯 特价虚拟主机
    版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
    关于我们:站长天空:专业提供最新的站长资讯、在线教程、虚拟主机权威评测、虚拟主机性能对比、网站制作教程,开发教程,站长工具。包括网页制作教程、冲浪宝典、编程参考、操作系统、软件教学、行业动态等。
    特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
    发表评论 打印  刷新     关闭