Solved

How to get size of the String using the Reader?

Posted on 2001-07-05
24
251 Views
Last Modified: 2012-06-21
How can I change this code so its gets the size of the string? Currently I get the length of the buffer
and it prints is many times, ie 32K

How can I modify the for loop may be use while loop to get the length of the string and write it CLOB?




Here's the entire code.....

public void writeStringToClob(int i_issue_id, String s_description) {

Connection   x_conn = (Connection) ox_pool.checkout ();
Statement    x_stmt = null;
s_description = "TEST THE 4000 character limit";

cdebug.println ("\n\nTESTING:  " + s_description);

   try {
       x_conn.setAutoCommit(false);
          x_stmt = x_conn.createStatement();
//        cdebug.println("x_statment: " + x_stmt.toString());

     ResultSet  l_lobDetails = x_stmt.executeQuery(
         "SELECT DESCR FROM ISSUE WHERE ISSUEID="+ Integer.toString ( i_issue_id ) + " FOR UPDATE");
       
       
       // load the rest of the description into the Clob Column

       if ( l_lobDetails.next() )
       {

       Clob l_clobDescr = l_lobDetails.getClob(1);
         
       Writer l_clobWriter = ( (oracle.sql.CLOB)l_clobDescr).getCharacterOutputStream();
         
         cdebug.println ("TESTING GET CLOB:  " + l_lobDetails.getClob(1));


//        java.io.Reader l_clobStream = l_clobDescr.getCharacterStream();

       //Read from Char Stream and  write to Clob Stream
       char[] l_buffer = new char[10*1024];  // buffer holding the characters being transferred
          l_buffer = s_description.toCharArray();
       for (int i = 0; i<l_buffer.length; i++){   // Read from StringBuffer
           cdebug.println (" GOT BUFFER: " + l_buffer[i]);
           l_clobWriter.write(l_buffer,0,l_buffer.length);   // Write to Clob
       }

           //cdebug.println ("Result: " + l_clobDescr);
         

//        l_clobStream.close();  // close reader
       l_clobWriter.close();  // close writer
       }

          l_lobDetails.close();  // close resultset
       x_stmt.close();        // close statement
       x_conn.close();        // close connection

       } catch (Exception ex) {
          cdebug.println ( "GtsNewIssue writeStringToClob caught error in getting the String");
          cdebug.println ("GtsNewIssue caught error: " + ex.toString() );

       }
ox_pool.checkin ( x_conn );
}

Awaiting a response,
Thanks.
0
Comment
Question by:sdesar
  • 15
  • 9
24 Comments
 
LVL 5

Expert Comment

by:mattyk
ID: 6257507
I'm not sure I follow your question exactly.  To insert in the length of the String

l_clobWriter.write(l_buffer,0,l_buffer.length);  

would instead be

l_clobWriter.write(l_buffer,0,s_description());  

is this what you were aiming for?

-mattyk
0
 
LVL 5

Expert Comment

by:mattyk
ID: 6257513
Also if the above is correct then you really don't need the loop at all.
0
 

Author Comment

by:sdesar
ID: 6257598
Yes ,I need to get the length of the description which is converted to a characterArray.

What should I dO?
0
 

Author Comment

by:sdesar
ID: 6257604
Yes ,I need to get the length of the description which is converted to a characterArray.

What should I dO?
0
 

Author Comment

by:sdesar
ID: 6257618
Yes ,I need to get the length of the description which is converted to a characterArray.

What should I dO?
0
 
LVL 5

Expert Comment

by:mattyk
ID: 6257646
See my original answert then.  Also why are you then looping through the array?

I think this should do it:


Replace

for (int i = 0; i<l_buffer.length; i++){   // Read from StringBuffer
          cdebug.println (" GOT BUFFER: " + l_buffer[i]);
          l_clobWriter.write(l_buffer,0,l_buffer.length);   // Write to Clob
      }


with

l_clobWriter.write(l_buffer,0,s_description());  

-matty

0
 

Author Comment

by:sdesar
ID: 6257683
But, s_description is not a method.  Its a string.
0
 

Author Comment

by:sdesar
ID: 6257704
Also, I need some loop to loop through the CharacterArray
.. isn't it?
0
 
LVL 5

Expert Comment

by:mattyk
ID: 6257705
Yes but it's a string object and one of it's methods is length().

Take a look at

http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html#length()

hope this helps!
Matty
0
 
LVL 5

Expert Comment

by:mattyk
ID: 6257711
The only thing your character array does is call the same method over and ove r agin passing it the same values.  If you could describe what you expect to happen in the loop I would happy to help you fix it up!
0
 

Author Comment

by:sdesar
ID: 6257717
I know that I can get the length of the String.  But I need to get the CharacterArray 's size
0
 

Author Comment

by:sdesar
ID: 6257732
The main reason for the bove routine is becuse in ORACLE there is a  2 k limit on String literal.  
So I have writen this method above which does the following-
Converts the Clob into String which is then converted to a
Character Array.
 

0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 

Author Comment

by:sdesar
ID: 6257742
I then need either a While or a for loop to read in the
Characters and write also.

Awaiting a response!

Thanks for helping me.
0
 
LVL 5

Expert Comment

by:mattyk
ID: 6257851
Alright  think I understand.  I think your code is correct but this

l_clobWriter.write(l_buffer,0,l_buffer.length);   // Write to Clob


should be moved out of the for loop.  So your code would do the follwing then

1. Convert Clob to a String
2. Convert the Strng to a char[]
3. Loop and print each char[]
4. Write the char[] to the Clob_writer stream

-matty
0
 

Author Comment

by:sdesar
ID: 6257865
Can you please show me how to code steps 3 and 4.
0
 

Author Comment

by:sdesar
ID: 6257870
I have written the code for steps 1 and 2.
But I don't understand how to loop?  what should I use
for, while etc..

0
 

Author Comment

by:sdesar
ID: 6257878
Currently, the way the code is written.. It loops 32 times, upto 32 K !
That's not good.  Thereofore, I would like io know what's a better way to do it!

Thanks
0
 
LVL 5

Expert Comment

by:mattyk
ID: 6257886
That's crrect it loops each time because of tthis statement:

cdebug.println (" GOT BUFFER: " + l_buffer[i]);

this loop reads one character at a time from the array and prints it.  Is this necessary?
0
 

Author Comment

by:sdesar
ID: 6260124
No its not necessary.. I was using it for debugging purposes only.
0
 
LVL 5

Expert Comment

by:mattyk
ID: 6260140
Right okay so then you shoudln't need to loop as you are passing in the entire char[] array.  So in my original list

1. Convert Clob to a String
2. Convert the Strng to a char[]
3. Loop and print each char[]
4. Write the char[] to the Clob_writer stream


point three is really not needed.  As such your code should be as I stated before:

Replace

for (int i = 0; i<l_buffer.length; i++){   // Read from StringBuffer
         cdebug.println (" GOT BUFFER: " + l_buffer[i]);
         l_clobWriter.write(l_buffer,0,l_buffer.length);   // Write to Clob
     }


with

l_clobWriter.write(l_buffer,0,s_description());  


0
 

Author Comment

by:sdesar
ID: 6260310
I removed the for loop and added -
l_clobWriter.write(l_buffer,0,s_description());  

I compiled it and got this error-
Reference to variable s_description in class GtsNewIssue
as if it were a method.


0
 
LVL 5

Accepted Solution

by:
mattyk earned 50 total points
ID: 6260320
oops that should be either:

l_clobWriter.write(l_buffer,0,s_description.length());  

or

l_clobWriter.write(l_buffer,0,l_buffer.length);  

-matty
0
 

Author Comment

by:sdesar
ID: 6260344
I tried:-
 l_clobWriter.write(l_buffer,0,s_description.length());  

But, I still got the Oracle error !
That is if I insert > 4000 character the Entire string failed to insert.

How can I get the chunk / block size so it writes to that block?

I think I need some sort of a loop to loop through those characters in the array.


0
 

Author Comment

by:sdesar
ID: 6260666
awaiting more suggestions!
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
unix in java example 9 53
JUnit 4 @Before and @BeforeClass differences 3 48
egit plugin on eclipse 8 38
more than one jdk and one jre 1 34
Java had always been an easily readable and understandable language.  Some relatively recent changes in the language seem to be changing this pretty fast, and anyone that had not seen any Java code for the last 5 years will possibly have issues unde…
Java Flight Recorder and Java Mission Control together create a complete tool chain to continuously collect low level and detailed runtime information enabling after-the-fact incident analysis. Java Flight Recorder is a profiling and event collectio…
This tutorial covers a practical example of lazy loading technique and early loading technique in a Singleton Design Pattern.
This theoretical tutorial explains exceptions, reasons for exceptions, different categories of exception and exception hierarchy.

895 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

13 Experts available now in Live!

Get 1:1 Help Now