我们正在尝试将大型CLOBS存储到DashDB中进行分析。是的,已创建的表是按行组织的。
CREATE TABLE test(
KEY VARCHAR(1000) NOT NULL,
MP3_FILE CLOB(250M) NOT NULL,
PRIMARY KEY(KEY)
) ORGANIZE BY ROW;
如果我们可以存储BLOBS就更好了,所以我们不必通过base64来增加文件大小。
但是,即使使用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();
谢谢, 亚伦
答案 0 :(得分: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;
答案 1 :(得分: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();