oracle中最常用的varcher2類型最多隻能儲存4000個位元組的內容,一般情況下是能夠滿足使用者的需求的。但是在一些特殊情況下(如要儲存圖片或者要儲存的內容超過了4000個位元組),varcher2就滿足不了這個需求了。這個時候我們可以藉助於oracle裡面的大欄位CLOB後者BLOB。舉例如下:
首先,在資料庫中建一張表news,為了簡單起見,只有一個欄位content(CLOB)。做好準備工作後就可以開始我們的CLOB之旅了。
以下是插入CLOB的代碼:
import java.sql.*;
import java.io.*;
public class TestClob{
public void TestClob(){}
public static void main(String args[]){
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
Connectionconn=DriverManager.getConnection ("jdbc:oracle:thin:@localhost:1521:ora32","tjpt","tjpt");
conn.setAutoCommit(false);
//第一步:插入一個空的CLOB
String sql1="insert into news(content,id) values (EMPTY_CLOB(),'1')";
PreparedStatement ps1=conn.prepareStatement(sql1);
ps1.executeUpdate();
ps1.close();
//第二步:取出該CLOB
String sql2="select content from news for update";
PreparedStatement ps2=conn.prepareStatement(sql2);
ResultSet rs2=ps2.executeQuery();
while (rs2.next()){
oracle.sql.CLOB clob=(oracle.sql.CLOB)rs2.getClob(1);
BufferedWriter out=new BufferedWriter(clob.getCharacterOutputStream());
String content="1234";//假定這是新聞的內容,當然可以也可以是其他的內容
out.write(content,0,content.length());
out.close();
}
conn.commit();
}
catch(Exception e){e.printStackTrace();}
}
}
既然插入進去了,那我們還得要檢驗一下:插進去的是不是你想插進去的內容?以下就是讀取CLOB的代碼:
import java.sql.*;
import java.io.*;
public class ReadClob{
public void ReadClob(){}
public static void main(String args[]){
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ora32","tjpt","tjpt");
String sql1="select content from news";
PreparedStatement ps1=conn.prepareStatement(sql1);
ResultSet rs1=ps1.executeQuery();
while (rs1.next()){
oracle.sql.CLOB clob=(oracle.sql.CLOB)rs1.getClob(1);
BufferedReader in=new BufferedReader(clob.getCharacterStream());
StringWriter out=new StringWriter();
int c;
while((c=in.read())!=-1){
out.write(c);
}
String content=out.toString();
System.out.println (content);//輸出CLOB內容
}
}
catch(Exception e){e.printStackTrace();}
}}