Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

How to get size of the String using the Reader?

Posted on 2001-07-05
24
Medium Priority
?
270 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 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
What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

 

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 200 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

Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

Question has a verified solution.

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

INTRODUCTION Working with files is a moderately common task in Java.  For most projects hard coding the file names, using parameters in configuration files, or using command-line arguments is sufficient.   However, when your application has vi…
This was posted to the Netbeans forum a Feb, 2010 and I also sent it to Verisign. Who didn't help much in my struggles to get my application signed. ------------------------- Start The idea here is to target your cell phones with the correct…
Viewers will learn about arithmetic and Boolean expressions in Java and the logical operators used to create Boolean expressions. We will cover the symbols used for arithmetic expressions and define each logical operator and how to use them in Boole…
This video teaches viewers about errors in exception handling.
Suggested Courses

636 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