愤怒的大鸟 发表于 2015-1-18 11:19:33

JAVA网页设计一个Jsp初学者的进修历程(七)

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("<","&lt");//用replaceAll()将字串中一切的<改成&lt
Stringnewtext=text2.replaceAll(">","&gt");//用replaceAll()将字串中一切的>改成&gt
//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会更好。以上都是俺个人看法,欢迎大家一起交流.

透明 发表于 2015-1-20 20:23:25

任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言

仓酷云 发表于 2015-1-22 13:47:15

是一种突破用户端机器环境和CPU

海妖 发表于 2015-1-27 22:06:00

接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。

简单生活 发表于 2015-2-9 05:05:51

象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。

柔情似水 发表于 2015-2-27 00:02:43

一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。

蒙在股里 发表于 2015-3-4 04:19:15

学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。

冷月葬花魂 发表于 2015-3-11 03:53:32

应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展

飘灵儿 发表于 2015-3-11 16:40:22

我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。

因胸联盟 发表于 2015-3-11 21:00:06

关于设计模式的资料,还是向大家推荐banq的网站 http://www.jdon.com/,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。

只想知道 发表于 2015-3-19 13:21:14

自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。

admin 发表于 2015-3-28 01:52:48

你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。
页: [1]
查看完整版本: JAVA网页设计一个Jsp初学者的进修历程(七)