2017-02-06 42 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; 

Еще лучше было бы, если бы мы могли хранить BLOBS, поэтому нам не пришлось бы увеличивать размер файла base64'ing.

Однако, даже с CLOBS, мы имеем ошибку:

com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: 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'ing. –

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();