|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
J2ME在手机游戏开发的作用也是无用质疑的。至于桌面程序,可能有人说java不行,界面不好看,但是请看看NetBeans和Eclipse吧,他们都是利用java开发的,而他们的界面是多么的华丽,所以界面决不是java的缺点。还有一个不得不提的优点就是大多java人员都挂在嘴边的java的跨平台性,目前这确实也是java优点之一。js|初学|历程一个Jsp初学者的进修历程(七)
TheUnforgiven
第七章超长文本的操纵――Clob范例数据的存取
回到我编写留言板的时分,事先要寄存留言板的注释内容,发明VARCHAR2()(可变长度的字符串)只能存4000字节,也就是2000个汉字,这也太少了啊,查一下数据库范例的材料,发明有这么几个范例:LONG,2G(如果我没记错的话,它是为了向前兼容,不保举利用);CLOB,4G,字符;BLOB,4G,二进制。看来超长文本应当利用CLOB了,图片天然是用BLOB了,扣问了一下他人,晓得这两品种型是不克不及像VARCHAR2()那样间接存的,只好作罢,先用VARCHAR2()顶一阵。
厥后我终究有空了,决计要完成这个义务,在网上查了一番材料,看了他人的例子,总算是无师自通看分明了:存的时分必要利用empty_clob()(这个不是Java的函数)先存一个空的标识(用我的了解就是先初始化一下),然后经由过程“流”将数据写进。上面是代码,个中try内里的是CLOB范例的存操纵:
-----------------------------------save_new.jsp------------------------------------------
<%@includefile="include.inc"%>
<%@pagecontentType="text/html;charset=gb2312"errorPage="request_error.htm"%>
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=gb2312"/>
<title>无题目文档</title>
</head>
<body>
<%
Stringtitle=request.getParameter("title");
Stringkind=request.getParameter("kind");
Stringnewtitle=title.replaceAll("","");//用replaceAll()将text字串中一切的单引号改成一连两个单引号
Stringtext=request.getParameter("text");
//Stringtext1=text.replaceAll("","");存clob时不需将单引号改成一连两个单引号
Stringtext2=text.replaceAll("<","<");//用replaceAll()将字串中一切的<改成<
Stringnewtext=text2.replaceAll(">",">");//用replaceAll()将字串中一切的>改成>
//replace只能处置单个字符!!
//改是为了不影响数据库的查询语句
//改是避免网页把他们天生标签,好比:<table>,<form>等
Stringauthor=session.getAttribute("name").toString();
out.println(author);
longID=System.currentTimeMillis();//获得一个工夫,从1970-1-10:00:00入手下手到以后工夫的毫秒数,用这个数作为该文章的ID标识
java.text.SimpleDateFormatformatter=newjava.text.SimpleDateFormat("yyyy-MM-ddHH:mm:ss");//格局化日期
java.util.DatecurrentTime_1=newjava.util.Date();//失掉以后体系工夫
Stringstrdate=formatter.format(currentTime_1);//将日期工夫转换成字符串情势
Connectioncon=null;
PreparedStatementstmt=null;//不克不及用Statement,我也不晓得为何,查了API,说这个PreparedStatement能够用于
//高效的屡次实行语句,没查到Statement这个类
ResultSetrs=null;
try
{
Class.forName(CLASSFORNAME);//载进驱动程式种别
con=DriverManager.getConnection(SERVANDDB);//创建数据库毗连
con.setAutoCommit(false);//设置不主动提交
Stringsql="insertintoarticle(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="selecttext_clobfromarticlewhereid="+ID+"forupdate";//恰是因为这条语句,id这个标识就必需得独一!!!!
//假如数据库中已有一笔记录的id与以后的id值不异,那末会查到那笔记录,也就没法向新拔出的纪录中的clob字段举行写进!
stmt=con.prepareStatement(sql);//查找方才增加的那笔记录
rs=stmt.executeQuery();
oracle.sql.CLOBosc=null;//初始化一个空的clob对象
if(rs.next())
osc=(oracle.sql.CLOB)rs.getClob("text_clob");
Writerw=osc.getCharacterOutputStream();//利用字符输入流
w.write(newtext);//将字符串str_text写到流中
w.flush();//输入流中数据,也许是正式向clob中写了
w.close();
con.commit();//实行
response.sendRedirect("index.jsp?page=1");//回主页面
}
catch(Exceptione)
{out.println(e);}
finally
{
if(rs!=null)
rs.close();
if(stmt!=null)
stmt.close();
if(con!=null)
con.close();
}
%>
</body>
</html>
--------------------------------------------------------------------------
取的时分就绝对复杂了,次要就两句,看上面的代码:
--------------------------------------------------------------------------
<%
Connectioncon=null;
Statementstmt=null;
ResultSetrs=null;
longID=Long.parseLong(request.getParameter("ID"));//将吸收到的字符串转成long型
try
{
Class.forName(CLASSFORNAME);//载进驱动程式种别
con=DriverManager.getConnection(SERVANDDB);//创建数据库毗连
stmt=con.createStatement();
Stringsql="select*fromArticlewhereID="+ID+"";
rs=stmt.executeQuery(sql);
if(rs.next())
{//下2行是用于从clob范例里读数据的,转成字符串。
oracle.sql.CLOBosc=(oracle.sql.CLOB)rs.getClob("text_clob");//我的数据库中存文本的CLOB型字段名为:text_clob
Stringstr_text=osc.getSubString((long)1,(int)osc.length());//subString是截取字符串(从1截到length),假如用osc.getString的话堕落。
out.print(str_text);
}//if
}//try
catch(Exceptione){}
rs.close();
stmt.close();
con.close();
%>
--------------------------------------------------------------------------
如今对CLOB范例的存取成绩已办理,可是当你操纵文本字符串的时分你会发明良多成绩,好比说,文本里有单引号()、标签(如<table>、<br>),另有回车和空格的成绩等等,都必要你在理论中发明并办理。
下一章说说BLOB。
Java到底会发战成什么样,让我们拭目以待吧,我始终坚信着java会更好。以上都是俺个人看法,欢迎大家一起交流. |
|