這裏是信息:如何PreparedStatement的inJDBC使用的setClob()
- 我有一個字符串
- 我要插入與弦的表中的記錄,其 列數據類型爲
CLOB
。 - 我想用
setClob()
的方法編寫預備。
所以我的問題是如何從這個字符串創建一個Clob
對象,以便我 可以使用setClob()
方法。
由於提前, 納文
這裏是信息:如何PreparedStatement的inJDBC使用的setClob()
CLOB
。setClob()
的方法編寫預備。所以我的問題是如何從這個字符串創建一個Clob
對象,以便我 可以使用setClob()
方法。
由於提前, 納文
對於CLOB是字符串的了。所以,只需使用.setString(),這應該工作。如果您使用的是ORACLE jdbc,那麼它就像CLOB INPUT參數是您聲明中的最後一個,特別是對於大數據。
例子:
INSERT INTO MY_TABL (NUM_COL, VARC_COL, VARC_COL, TS_COL, CLOB_COL)
VALUES(?,?,?,?,?);
正如你所看到的,CLOB_COL是CLOB類型,應該是最後一次,這樣,當 你做.setString(5)和5是最後一個索引。
如果你使用set String,如果字符串太大,我可能會有錯誤,我發現這個問題,因爲我有這個錯誤「setString只能處理少於32766個字符的字符串」,而使用setString作爲clob字段 – valepu
如果要將字符串寫入CLOB列,只需使用PreparedStatement.setString
即可。
如果你想知道如何創建一個CLOB從字符串,這是它
Clob clob = connection.createClob();
clob.setString(1, str);
你可以從一個連接對象創建CLOB如下
Connection con = null;// write code to make a connection object
Clob clob = con.createClob();
String str = "this is a stirng";
clob.setString(1, str);
PreparedStatement ps = null;// write code to create a prepared statement
ps.setClob(4, clob);
或者你可以嘗試替代代碼如下:
//alternative way
String str = "this is a stirng";
ByteArrayInputStream inputStream = new ByteArrayInputStream(str.getBytes());
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
int parameterIndex = 1;
PreparedStatement ps = null;// write code to create a prepared statement
ps.setClob(parameterIndex, inputStreamReader);
今天我有一個Clob字段的問題,因爲我使用「setString」來設置的參數,但隨後一邊用很長的字符串測試我有這個錯誤:「了setString只能處理少於32766個字符的字符串」
我用connection.createClob,但它給了我這個例外:
java.lang.AbstractMethodError: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.createClob()Ljava/sql/Clob;
所以找這個例外,我發現這個 using CLOB in java throwing exception和接受的答案(使用中的setCharacterStream代替的setClob)工作對我來說
複製/從公認的答案(因此所有的學分是a_horse_with_no_name)
粘貼StringReader reader = new StringReader(userAbout);
PreparedStatement insertClob = dbCon.prepareStatement("UPDATE user_data SET user_about=? WHERE user_id=?");
insertClob.setCharacterStream(1, reader, userAbout.length());
insertClob.setInt(2,userId);
我有這個問題的具體變化,需要從運行在該數據庫上的Java代碼插入到Oracle數據庫的clob。這裏沒有任何答案對我很有用。
我終於找到解決方案,訣竅就是使用oracle.sql。CLOB
這種做法,我發現:
create table test_clob (
c clob
);
create or replace and compile java source named java_clob_insert as
import java.sql.Connection;
import java.sql.PreparedStatement;
import oracle.sql.CLOB;
import java.io.Writer;
public class JavaClobInsert {
public static void doInsert() {
try {
//create the connection and statement
Connection oracleConn =
(new oracle.jdbc.OracleDriver()).defaultConnection();
String stmt = "INSERT INTO test_clob values (?)";
PreparedStatement oraclePstmt = oracleConn.prepareStatement(stmt);
//Imagine we have a mysql longtext or some very long string
String s = "";
for (int i = 0; i < 32768; i++) {
s += i % 10;
}
//Initialise the Oracle CLOB
CLOB clob;
clob = CLOB.createTemporary(oracleConn, true, CLOB.DURATION_CALL);
//Good idea to check the string is not null before writing to clob
if (s != null) {
Writer w = clob.setCharacterStream(1L);
w.write(s);
w.close();
oraclePstmt.setClob(1, clob);
} else {
oraclePstmt.setString(1, "");
}
//clean up
oraclePstmt.executeUpdate();
oracleConn.commit();
oraclePstmt.close();
oracleConn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
/
create or replace procedure clob_insert as language java name
'JavaClobInsert.doInsert()';
/
begin
clob_insert;
end;
/
select *
from test_clob;
看那'Connection'的javadoc。有一個'createClob()'方法。 –