2017-02-06 26 views
0

我們正試圖將大型CLOBS存儲到DashDB中進行分析。是的,已經創建的表是行組織的。DashDB行組織表支持CLOBS嗎?

CREATE TABLE test(
    KEY VARCHAR(1000) NOT NULL, 
    MP3_FILE CLOB(250M) NOT NULL, 
    PRIMARY KEY(KEY) 
) ORGANIZE BY ROW; 

更妙的是,如果我們能夠存儲BLOB,所以我們就不必通過base64'ing增加文件大小。

然而,即使有CLOBS,我們有錯誤:

com.ibm.db2.jcc.am.SqlSyntaxErrorException:DB2 SQL錯誤:SQLCODE = -204,SQLSTATE = 42704,則sqlerrmc = DASH107483.TEST, DRIVER = 3.71.22

我們使用的代碼類似於:

PreparedStatement pre = connection.prepareStatement("insert into test (key,mp3_file) values (?,?)"); 
pre.setString(1, "test"); 
pre.setCharacterStream(2, new StringReader(encoded), encoded.length()); 
int count = pre.executeUpdate(); 
connection.commit(); 
logger.info("mergedMP3 file isUpdated: " + count); 
pre.close(); 
connection.close(); 

感謝, 亞倫

回答

1

我不認爲這個問題是CLOB有關。該錯誤消息表明未找到表DASH107483.TEST

使用小寫字符創建表的任何機會(例如,名稱被括在DDL中的雙引號中)?

CREATE TABLE "test"( KEY VARCHAR(1000) NOT NULL, MP3_FILE CLOB(250M) NOT NULL, PRIMARY KEY(KEY) ) ORGANIZE BY ROW;

當您運行

SELECT TABNAME FROM SYSCAT.TABLES WHERE TABSCHEMA='DASH107483' ORDER BY TABNAME;

+0

使用大寫名稱後 - >最後,字節而不是base64的設置是更好的解決方案。 –

0

到底什麼是輸出,使用的字節似乎運作良好。

PreparedStatement pre = connection.prepareStatement("insert into largespeechsynthesis(KEY,MP3_FILE) values (?,?)"); 
pre.setString(1, attachmentID.replace(".mp3", "")); 
pre.setBytes(2, Files.readAllBytes(mergedFile.toPath())); 
int count = pre.executeUpdate(); 
logger.info("mergedMP3 file isUpdated: " + count); 
connection.commit(); 
pre.close(); 
connection.close();