No more data to read from socket UTF instance problem

From: <grga.mrkonjic_at_zg.hinet.hr>
Date: Tue, 04 Feb 2003 11:25:14 +0100
Message-ID: <g75v3vsi0facsa4uvmcbfr7ho62lc2g0ja_at_4ax.com>


Hi, all,  

I'm using oracle jdbc thin driver and SunOne Application Server 7 environment.
I'm trying to call the stored procedure which has one IN parameter that is of type CLOB.
My code looks like this:

conn = DriverManager.getConnection (url, username, password); conn.setAutoCommit(false);
clob = CLOB.createTemporary(conn, true, CLOB.DURATION_SESSION); Writer wr = clob.getCharacterOutputStream();

wr.write(m_data);
wr.flush();
wr.close();

PreparedStatement pstmt = conn.prepareCall(procedureCall); pstmt.setClob(1, clob);
pstmt.execute();

but when I run it, it throws this (at wr.write(m_data) statement):

[29/Jan/2003:15:07:25] WARNING ( 9340): CORE3283: stderr:
java.io.IOException: No more data to read from socket
[29/Jan/2003:15:07:25] WARNING ( 9340): CORE3283: stderr: at
oracle.jdbc.dbaccess.DBError.SQLToIOException(DBError.java:716)
[29/Jan/2003:15:07:25] WARNING ( 9340): CORE3283: stderr: at
oracle.jdbc.driver.OracleClobWriter.flushBuffer(OracleClobWriter.java:270)
[29/Jan/2003:15:07:25] WARNING ( 9340): CORE3283: stderr: at
oracle.jdbc.driver.OracleClobWriter.write(OracleClobWriter.java:172)
[29/Jan/2003:15:07:25] WARNING ( 9340): CORE3283: stderr: at
java.io.Writer.write(Writer.java:150)
[29/Jan/2003:15:07:25] WARNING ( 9340): CORE3283: stderr: at
java.io.Writer.write(Writer.java:126)

I tried using this instead of Writer:

clob.putString(1, m_data);

but the same error occurs.

I then tried to do both of these:

InputStream reader = new StringBufferInputStream(m_data); PreparedStatement pstmt = conn.prepareCall(procedureCall); pstmt.setUnicodeStream(1, reader, reader.available());

Reader reader = new StringReader(m_data); PreparedStatement pstmt = conn.prepareCall(procedureCall); pstmt.setCharacterStream(1, reader, m_data.length());

but in both cases I got this (at pstmt.setCharacterStream() or pstmt.setUnicodeStream()):

[29/Jan/2003:16:06:00] WARNING ( 9340): CORE3283: stderr:
java.sql.SQLException: Data size bigger than max size for this type: 76716
[29/Jan/2003:16:06:00] WARNING ( 9340): CORE3283: stderr: at
oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
[29/Jan/2003:16:06:00] WARNING ( 9340): CORE3283: stderr: at
oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
[29/Jan/2003:16:06:00] WARNING ( 9340): CORE3283: stderr: at
oracle.jdbc.ttc7.TTCItem.setArrayData(TTCItem.java:95)
[29/Jan/2003:16:06:00] WARNING ( 9340): CORE3283: stderr: at
oracle.jdbc.dbaccess.DBDataSetImpl.setBytesBindItem(DBDataSetImpl.java:2414)
[29/Jan/2003:16:06:00] WARNING ( 9340): CORE3283: stderr: at
oracle.jdbc.driver.OraclePreparedStatement.setItem(OraclePreparedStatement.java:1134)
[29/Jan/2003:16:06:00] WARNING ( 9340): CORE3283: stderr: at
oracle.jdbc.driver.OraclePreparedStatement.setUnicodeStream(OraclePreparedStatement.java:2633)

But, the greatest mistery of all is that code with temporary CLOB works fine when I create instance and use default settings. Problem occurs when I create instance with UTF coding scheme. But we are forced to use Unicode coding scheme, because of local special characters.

We are using Oracle 9i on Solaris UNIX platform and jdbc drivers supplied with it.

The CLOB I am trying to pass is a XML file and it is possible to be up to 400 KB in size.

Please help. I'm at my wit's end! Received on Tue Feb 04 2003 - 11:25:14 CET

Original text of this message