當前位置:首頁 » 編程語言 » Javasqlclob轉
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

Javasqlclob轉

發布時間: 2022-08-09 09:38:36

『壹』 String 轉Clob mysql springMVC

既然你是從資料庫取出CLOB欄位,那麼不用resultset那是用什麼取出的。
如果從資料庫裡面取出的是CLOB欄位,為什麼會變成String類型呢。

String轉CLOB,下面是個例子

public class TestDB {
public static void main(String[] args) {
try {

/** Loading the driver*/

Class.forName("com.oracle.jdbc.Driver");

/** Getting Connection*/
Connection con = DriverManager.getConnection("jdbc:oracle://localhost:3306/test","test","test");

PreparedStatement pstmt = con.prepareStatement("insert into Emp(id,name,description)values(?,?,?)");
pstmt.setInt(1,5);
pstmt.setString(2,"Das");
// Create a big CLOB value...AND inserting as a CLOB
StringBuffer sb = new StringBuffer(400000);

sb.append("This is the Example of CLOB ..");
String clobValue = sb.toString();
pstmt.setString(3, clobValue);
int i= pstmt.executeUpdate();
System.out.println("Done Inserted");
pstmt.close();
con.close();

// Retrive CLOB values
Connection con = DriverManager.getConnection("jdbc:oracle://localhost:3306/test","test","test");
PreparedStatement pstmt = con.prepareStatement("select * from Emp where id=5");
ResultSet rs = pstmt.executeQuery();
Reader instream = null;
int chunkSize;
if(rs.next()){
String name = rs.getString("name");
java.sql.Clob clob = result.getClob("description")
StringBuffer sb1 = new StringBuffer();

chunkSize = ((oracle.sql.CLOB)clob).getChunkSize();
instream = clob.getCharacterStream();
BufferedReader in = new BufferedReader(instream);
String line = null;
while ((line = in.readLine()) != null) {
sb1.append(line);
}
if(in != null){
in.close();
}

String clobdata = sb1.toString(); // this is the clob data converted into string

}

} catch (Exception e) {

e.printStackTrace();
}
}
}

『貳』 java 處理 oracle clob類型 欄位

豬哥解答:
呵呵,從你的代碼里沒看出大問題,你遇到的那個問題出現的情況通常是:在事務里的不同地方對同一個表的同一條數據進行update操作。
而解決的方式一般是兩條update合並成1條,或者強制設定事務的隔離級別,你這個代碼不完整,我也不知道該給你往哪裡加東西。
不過有一個小問題你得先調整一下:
Writer outstream = clob.getCharacterOutputStream();
if (content != null) {
// outstream.write(content);
outstream.write(content.toCharArray(),0,content.toCharArray().length);
outstream.flush();
outstream.close();
}
你的這段代理里這句話Writer outstream = clob.getCharacterOutputStream();應該拿到if(content!=null)裡面,按照你原來的寫法,如果那個if條件不滿足,那麼這個輸出流就不會關閉了,這個也許是引起問題的關鍵吧。
如果不行的話,你就把完整的代碼貼上吧,你這個異常要看整個事務是怎麼寫的。

『叄』 sql如何添加有Clob的欄位

CLOB這個類型就是使用CHAR來保存數據的,把nvarchar類型數據插入到oracle對應的CLOB類型中只要加個to_char()轉換下就可以了

『肆』 java讀取clob

這是oracle按照jdbc規范所實現的jdbc驅動,是oracle的東西.

不管怎麼用,你都要把oracle提供的jdbc驅動下載下來,然後可以使用javac -classpath選項載入該jar文件,或者在集成開發環境中設置編譯環境。

『伍』 String 轉化為 java.io.Clob 對象

要先將原來的數據的clob欄位置為空,然後更新,用這個:

conn = DAOFactory.getInstance().getConnection();
// 事務處理
conn.setAutoCommit(false);

// 先把clob欄位content置空,content為clob欄位
String sql = "update " + table + " set content=empty_clob()";
stmt = conn.createStatement();
stmt.executeUpdate(sql);

// 從資料庫中取出插入的clob欄位
sql = "select content from " + table + " for update";
rs = stmt.executeQuery(sql);
if(rs.next()) {
// 給clob數據重新賦值,然後更新到資料庫中
Clob clob = rs.getClob(1);
clob.setString(1, content);
sql = "update " + table + " set content=? where id=?";
pstmt = conn.prepareStatement(sql);
pstmt.setClob(1, clob);
pstmt.setString(2, id);
pstmt.executeUpdate();
}

// 事務提交
conn.commit();
conn.setAutoCommit(true);

補充:

Clob有點特殊,它是一個資料庫相關的介面,沒法實例化, 你可以通過SerialClob來實例化,這個我沒用過。

api上這樣寫到:

public SerialClob(char[] ch)
throws SerialException,
SQLException按照給定 char 數組的序列化形式構造一個 SerialClob 對象。
新的 SerialClob 對象使用 char 數組中的數據進行初始化,因此允許未連接 RowSet 對象無需接觸數據源即可建立序列化的 Clob 對象。

參數:
ch - 表示要序列化的 Clob 對象的 char 數組

你試試吧

『陸』 如何把clob類型數據變成string類型的數據

給你段參考代碼,讀取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();
}
}

『柒』 JAVA讀取Oracle資料庫Clob欄位轉換成String問題

如果使用oracle的話,直接將clob欄位讀取為string;也就是下面這一行:
clob
=
(oracle.sql.clob)
rs.getobject(1);
可以直接寫成
string
str
=
rs.getstring(1);

『捌』 java 大字元串轉為二進制流存入CLOB欄位 JDBC方法

我以前寫程序發現:
oracle的資料庫BLOB不能用來存儲字元,改用NCLOB就OK了。

BLOB:用來存儲無結構的二進制數據
CLOB:存儲單位元組字元數據。(別用來存中文喔。。。)
NCLOB:用來存儲定寬多位元組字元數據。

『玖』 oracle資料庫CLOB類型怎麼轉換為String

給你段參考代碼,讀取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();
}
}