Solved

How to get size of the String using the Reader?

Posted on 2001-07-05
24
250 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
Comment Utility
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
Comment Utility
Also if the above is correct then you really don't need the loop at all.
0
 

Author Comment

by:sdesar
Comment Utility
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
Comment Utility
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
Comment Utility
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
Comment Utility
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
Comment Utility
But, s_description is not a method.  Its a string.
0
 

Author Comment

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

Expert Comment

by:mattyk
Comment Utility
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
Comment Utility
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
Comment Utility
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
Comment Utility
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
How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

 

Author Comment

by:sdesar
Comment Utility
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
Comment Utility
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
Comment Utility
Can you please show me how to code steps 3 and 4.
0
 

Author Comment

by:sdesar
Comment Utility
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
Comment Utility
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
Comment Utility
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
Comment Utility
No its not necessary.. I was using it for debugging purposes only.
0
 
LVL 5

Expert Comment

by:mattyk
Comment Utility
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
Comment Utility
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
Comment Utility
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
Comment Utility
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
Comment Utility
awaiting more suggestions!
0

Featured Post

How to improve team productivity

Quip adds documents, spreadsheets, and tasklists to your Slack experience
- Elevate ideas to Quip docs
- Share Quip docs in Slack
- Get notified of changes to your docs
- Available on iOS/Android/Desktop/Web
- Online/Offline

Join & Write a Comment

Suggested Solutions

Title # Comments Views Activity
IT Company 5 68
json example 39 110
Saving Tweets with emojis using Twitter4J in a Mysql table 2 50
create a gui in perl 3 42
Java contains several comparison operators (e.g., <, <=, >, >=, ==, !=) that allow you to compare primitive values. However, these operators cannot be used to compare the contents of objects. Interface Comparable is used to allow objects of a cl…
Are you developing a Java application and want to create Excel Spreadsheets? You have come to the right place, this article will describe how you can create Excel Spreadsheets from a Java Application. For the purposes of this article, I will be u…
Viewers learn how to read error messages and identify possible mistakes that could cause hours of frustration. Coding is as much about debugging your code as it is about writing it. Define Error Message: Line Numbers: Type of Error: Break Down…
This tutorial will introduce the viewer to VisualVM for the Java platform application. This video explains an example program and covers the Overview, Monitor, and Heap Dump tabs.

744 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

17 Experts available now in Live!

Get 1:1 Help Now