Solved

How to get size of the String using the Reader?

Posted on 2001-07-05
24
252 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
Announcing the Most Valuable Experts of 2016

MVEs are more concerned with the satisfaction of those they help than with the considerable points they can earn. They are the types of people you feel privileged to call colleagues. Join us in honoring this amazing group of Experts.

 

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
 

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

Gigs: Get Your Project Delivered by an Expert

Select from freelancers specializing in everything from database administration to programming, who have proven themselves as experts in their field. Hire the best, collaborate easily, pay securely and get projects done right.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
groupSum5 challenge 5 84
sites similar to codingbat to improve coding hanson skills 3 49
How do I remove an object from a 3 23
Java: anonymous class 4 16
By the end of 1980s, object oriented programming using languages like C++, Simula69 and ObjectPascal gained momentum. It looked like programmers finally found the perfect language. C++ successfully combined the object oriented principles of Simula w…
Introduction This article is the first of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article explains our test automation goals. Then rationale is given for the tools we use to a…
Viewers learn about the scanner class in this video and are introduced to receiving user input for their programs. Additionally, objects, conditional statements, and loops are used to help reinforce the concepts. Introduce Scanner class: Importing…
Viewers will learn about the regular for loop in Java and how to use it. Definition: Break the for loop down into 3 parts: Syntax when using for loops: Example using a for loop:

813 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

10 Experts available now in Live!

Get 1:1 Help Now