KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > net > jforum > dao > oracle > OracleUtils


1 /*
2  * Copyright (c) Rafael Steil
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms,
6  * with or without modification, are permitted provided
7  * that the following conditions are met:
8  *
9  * 1) Redistributions of source code must retain the above
10  * copyright notice, this list of conditions and the
11  * following disclaimer.
12  * 2) Redistributions in binary form must reproduce the
13  * above copyright notice, this list of conditions and
14  * the following disclaimer in the documentation and/or
15  * other materials provided with the distribution.
16  * 3) Neither the name of "Rafael Steil" nor
17  * the names of its contributors may be used to endorse
18  * or promote products derived from this software without
19  * specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT
22  * HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
23  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
24  * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
25  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR
26  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
27  * THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
28  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
29  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES
30  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
31  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
32  * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
33  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
34  * IN CONTRACT, STRICT LIABILITY, OR TORT
35  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
36  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
37  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE
38  *
39  * Created on Jan 26, 2005 4:42:44 PM
40  * The JForum Project
41  * http://www.jforum.net
42  */

43 package net.jforum.dao.oracle;
44
45 import java.io.IOException JavaDoc;
46 import java.io.InputStream JavaDoc;
47 import java.io.OutputStream JavaDoc;
48 import java.sql.Blob JavaDoc;
49 import java.sql.PreparedStatement JavaDoc;
50 import java.sql.ResultSet JavaDoc;
51 import java.sql.SQLException JavaDoc;
52
53 import net.jforum.JForumExecutionContext;
54
55 /**
56  * @author Dmitriy Kiriy
57  * @version $Id: OracleUtils.java,v 1.8 2006/01/29 15:07:09 rafaelsteil Exp $
58  */

59 public class OracleUtils
60 {
61     public static String JavaDoc readBlobUTF16BinaryStream(ResultSet JavaDoc rs, String JavaDoc fieldName) throws IOException JavaDoc, SQLException JavaDoc
62     {
63         Blob JavaDoc clob = rs.getBlob(fieldName);
64
65         InputStream JavaDoc is = clob.getBinaryStream();
66         StringBuffer JavaDoc sb = new StringBuffer JavaDoc();
67         int readedBytes = 0;
68         int bufferSize = 4096;
69
70         do {
71             byte[] bytes = new byte[bufferSize];
72             readedBytes = is.read(bytes);
73             if (readedBytes > 0) {
74                 String JavaDoc readed = new String JavaDoc(bytes, 0, readedBytes, "UTF-16");
75                 sb.append(readed);
76             }
77         } while (readedBytes == bufferSize);
78
79         is.close();
80
81         return sb.toString();
82     }
83
84     /**
85      * The query should look like:
86      *
87      * SELECT blob_field from any_table WHERE id = ? FOR UPDATE
88      *
89      * BUT KEEP IN MIND:
90      *
91      * When you insert record in previous step, it should go with empty_blob() like:
92      *
93      * INSERT INTO jforum_posts_text ( post_text ) VALUES (EMPTY_BLOB())
94      *
95      * @param query
96      * @param idForQuery
97      * @param value
98      * @throws IOException
99      * @throws SQLException
100      */

101     public static void writeBlobUTF16BinaryStream(String JavaDoc query, int idForQuery, String JavaDoc value) throws IOException JavaDoc,
102             SQLException JavaDoc
103     {
104         PreparedStatement JavaDoc p = JForumExecutionContext.getConnection().prepareStatement(query);
105         p.setInt(1, idForQuery);
106
107         ResultSet JavaDoc rs = p.executeQuery();
108         rs.next();
109         Blob JavaDoc postText = rs.getBlob(1);
110
111         OutputStream JavaDoc blobWriter = ((oracle.sql.BLOB)postText).getBinaryOutputStream();
112         blobWriter.write(value.getBytes("UTF-16"));
113
114         blobWriter.close();
115         rs.close();
116         p.close();
117     }
118 }
119
Popular Tags