程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> JSP編程 >> 關於JSP >> 一個Jsp初學者的學習過程(七)

一個Jsp初學者的學習過程(七)

編輯:關於JSP

 一個jsp(SUN企業級應用的首選)初學者的學習過程(七)

TheUnforgiven


第七章  超長文本的操作——Clob類型數據的存取

    回到我編寫留言板的時候,當時要存放留言板的正文內容,發現VARCHAR2()(可變長度的字符串)只能存4000字節,也就是2000個漢字,這也太少了啊,查一下數據庫類型的資料,發現有這麼幾個類型:LONG,2G(要是我沒記錯的話,它是為了向前兼容,不推薦使用);CLOB,4G,字符;BLOB,4G,二進制。看來超長文本應該使用CLOB了,圖片自然是用BLOB了,詢問了一下別人,知道這兩種類型是不能像VARCHAR2()那樣直接存的,只好作罷,先用VARCHAR2()頂一陣。
    後來我終於有空了,決心要完成這個任務,在網上查了一番資料,看了別人的例子,總算是無師自通看明白了:存的時候需要使用empty_clob()(這個不是Java的函數)先存一個空的標識(用我的理解就是先初始化一下),然後通過“流”將數據寫入。下面是代碼,其中try裡面的是CLOB類型的存操作:
-----------------------------------save_new.jsp(SUN企業級應用的首選)------------------------------------------
<%@ 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 xml(標准化越來越近了)ns="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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved