java将clob类型文件写到磁盘_Java对Oracle中Clob类型数据的读取和写入
Java對Oracle中Clob數據類型是不能夠直接插入的,但是可以通過流的形式對clob類型數據寫入或者讀取,網上代碼并不算特別多,講的
Java對Oracle中Clob數據類型是不能夠直接插入的,但是可以通過流的形式對clob類型數據寫入或者讀取,網上代碼并不算特別多,講的也不是很清楚,我對網上資料進行了整理和總結,具體看代碼:
寫入clob數據
import java.io.Writer;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class TestClobIn {
public static void main(String args[]){
String data="this is a long passage!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!";
Writer outStream = null;
//通過JDBC獲得數據庫連接
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ewins", "scott", "tiger");
con.setAutoCommit(false);
Statement st = con.createStatement();
//插入一個空對象empty_clob(),這個是必須的
st.executeUpdate("insert into TESTCLOB(ID, NAME, CLOBATTR)values(2,'thename', empty_clob())");
//鎖定數據行進行更新,注意“for update”語句,這里不用for update鎖定不可以插入clob
ResultSet rs = st.executeQuery("select CLOBATTR from TESTCLOB where ID=1 for update");
if (rs.next())
{
//得到java.sql.Clob對象后強制轉換為oracle.sql.CLOB
oracle.sql.CLOB clob = (oracle.sql.CLOB) rs.getClob("CLOBATTR");
outStream = clob.getCharacterOutputStream();
//data是傳入的字符串,定義:String data
char[] c = data.toCharArray();
outStream.write(c, 0, c.length);
}
outStream.flush();
outStream.close();
con.commit();
con.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
讀取clob數據
import java.io.InputStream;
import java.io.Reader;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
public class TestClobOut {
public static void main(String args[]){
String data;
Reader inStream=null;
//獲得數據庫連接
Connection con = ConnectionFactory.getConnection();//ConnectionFactory類是另外定義的,不必糾結
con.setAutoCommit(false);
Statement st = con.createStatement();
//不需要“for update”
ResultSet rs = st.executeQuery("select CLOBATTR from TESTCLOB where ID=1");
if (rs.next())
{
java.sql.Clob clob = rs.getClob("CLOBATTR");
inStream = clob.getCharacterStream();
char[] c = new char[(int) clob.length()];
inStream.read(c);
//data是讀出并需要返回的數據,類型是String
data = new String(c);
inStream.close();
}
inStream.close();
con.commit();
con.close();
}
}
對比我們可以看出,無論出庫入庫,都要對clob數據類型進行查詢操作,寫入clob數據相對來說更復雜一點,需要先插入empty_clob()值,然后使用帶“for update”的查詢語句鎖定更新行,,最后實例化輸出流并對clob類型字段數據進行寫入操作;讀取clob相對輕松一些,利用getCharacterStream方法得到輸入流,從數據庫中clob字段下,直接將數據讀取出來。
本條技術文章來源于互聯網,如果無意侵犯您的權益請點擊此處反饋版權投訴
本文系統來源:php中文網
總結
以上是生活随笔為你收集整理的java将clob类型文件写到磁盘_Java对Oracle中Clob类型数据的读取和写入的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java游戏输赢统计_java利用多线程
- 下一篇: python之sys模块详解_(转)py