㈠ oracle 對於大文本數據用什麼類型
clob類型,但對於這個類型處理起來還是比較麻煩的,varchar2長度為4000bytes,如果varchar2能滿足樓主的需求,建議使用varchar2,下面提供了在java 中讀取clob類型的方式,我主要講的是JDBC的操作,Hibernate目前不講,操作這個Clob列主要分為插入和獲取倆個操作:
1、Java程序插入Clob值到Oracle資料庫表中:
String clob= "這里主要是要插入到表中的值";
//前面具體資料庫連接代碼這里省略,直接進正題
String sql = "insert into clob_test(id,str) values (1,?)";
PreparedStatement stmt = conn.prepareStatement(sql);
// 將clob轉成流形式
Reader clobReader = new StringReader(clob);
stmt.setCharacterStream(1,clobReader,clob.length());// 替換sql語句中的?
stmt.executeUpdate();
2、讀取Clob列的值
String sql = "select str from clob_test where id=1";
PreparedStatement stmt = conn.prepareStatement(sql);
ResultSet rs = stmt.executeQuery();
//最後獲得的結果
String resultClob;
if(rs.next()){
//導入oracle.sql.CLOB包,或者直接引用這個包
oracle.sql.CLOB clob = rs.getClob("str");
Reader rd= clob.getCharacterStream();// 得到流
BufferedReader br = new BufferedReader(rd);
String s = br.readLine();
StringBuffer sb= new StringBuffer();
while (s != null) {
// 循環賦值
sb.append(s);
s = br.readLine();
}
clobResult = sb.toString();
}
希望樓主採納
㈡ oracle 中存儲大量文字信息用什麼欄位,java後台怎麼實現,請舉例。謝謝。
在oracle中存儲大量的文字應該是用CLOB欄位來存儲。這種類型在用java將數據存進資料庫中時比較簡單,直接將String類型的文本寫入就可以了。但是在從資料庫中讀取CLOB類型的數據到java中時比較麻煩,因為你是拿不到數據的,只能拿到這個欄位的一個隱式指針,然後還要通過輸入流來拿到。
㈢ oracle的Clob類型在java的增。改、差。要對6000字元進行操作,普通的string不行。知道的。。。。。
好像在java中有提供Clob這個類型的數據。你可以直接聲明一個Clob類型變數存儲查詢結果,然後直接對Clob變數進行操作。
具體方法可以查看API
㈣ JAVA讀取Oracle資料庫Clob欄位轉換成String問題
getClob,可以獲得CLOB欄位的值,用
rs.getString無法得到
數據
,返回的
是
NULL;
㈤ java 大字元串轉為二進制流存入CLOB欄位 JDBC方法
dbField.getFieldValue().toString().getBytes();
上面這個值有嗎?取到了嗎?
下面是我以前一個項目的
InputStream pic = new FileInputStream(dto.get(i).getLibPic());
sql = "INSERT INTO piclib (name,pic,sign,remark) VALUES (?,?,?,?)";
pstmt = con.prepareStatement(sql);
pstmt.setString(1, dto.get(i).getName());
pstmt.setBinaryStream(2,pic,(int)dto.get(i).getLibPic().length());
㈥ java在oracle資料庫中怎麼插入讀取CLOB值
參考:
/**
* 寫入、更新CLOB欄位的代碼示例
*/
public void writeClob() {
//自定義的資料庫連接管理類
Connection conn = DbManager.getInstance().getConnection();
try {
conn.setAutoCommit(false);
// 1.這種方法寫入CLOB欄位可以。
PreparedStatement stat = conn
.prepareStatement("insert into t_clob (id,clobfield) values(sys_guid(),?)");
String clobContent = "This is a very very long string";
StringReader reader = new StringReader(clobContent);
stat.setCharacterStream(1, reader, clobContent.length());
stat.executeUpdate();
// 2.使用類似的方法進行更新CLOB欄位,則不能成功
// stat.close();
// stat =null;
// stat =
// conn.prepareStatement("update t_clob set clobfield=? where id=1");
// stat.setCharacterStream(1, reader, clobContent.length());
// stat.executeUpdate();
// 3.需要使用for update方法來進行更新,
// 但是,特別需要注意,如果原來CLOB欄位有值,需要使用empty_clob()將其清空。
// 如果原來是null,也不能更新,必須是empty_clob()返回的結果。
stat = conn
.prepareStatement("select clobfield from t_clob where id='1' for update");
ResultSet rs = stat.executeQuery();
if (rs.next()) {
oracle.sql.CLOB clob = (oracle.sql.CLOB) rs
.getClob("clobfield");
Writer outStream = clob.getCharacterOutputStream();
char[] c = clobContent.toCharArray();
outStream.write(c, 0, c.length);
outStream.flush();
outStream.close();
}
conn.commit();
} catch (SQLException | IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
DbManager.getInstance().closeConnection(conn);
}