OracleUtils.java
Upload User: gdxydsw
Upload Date: 2019-01-29
Package Size: 16721k
Code Size: 4k
Category:

Java Develop

Development Platform:

Java

  1. /*
  2.  * Copyright (c) JForum Team
  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. import java.io.IOException;
  45. import java.io.InputStream;
  46. import java.io.OutputStream;
  47. import java.sql.Blob;
  48. import java.sql.PreparedStatement;
  49. import java.sql.ResultSet;
  50. import java.sql.SQLException;
  51. import net.jforum.JForumExecutionContext;
  52. import net.jforum.exceptions.DatabaseException;
  53. import net.jforum.util.DbUtils;
  54. import oracle.sql.BLOB;
  55. /**
  56.  * @author Dmitriy Kiriy
  57.  * @version $Id: OracleUtils.java,v 1.14 2007/08/31 22:56:40 rafaelsteil Exp $
  58.  */
  59. public class OracleUtils
  60. {
  61. public static String readBlobUTF16BinaryStream(ResultSet rs, String fieldName) throws SQLException
  62. {
  63. try {
  64. Blob clob = rs.getBlob(fieldName);
  65. InputStream is = clob.getBinaryStream();
  66. StringBuffer sb = new StringBuffer();
  67. int readedBytes;
  68. int bufferSize = 4096;
  69. do {
  70. byte[] bytes = new byte[bufferSize];
  71. readedBytes = is.read(bytes);
  72. if (readedBytes > 0) {
  73. String readed = new String(bytes, 0, readedBytes, "UTF-16");
  74. sb.append(readed);
  75. }
  76. } while (readedBytes == bufferSize);
  77. is.close();
  78. return sb.toString();
  79. }
  80. catch (IOException e) {
  81. throw new DatabaseException(e);
  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 String
  96.  * @param idForQuery int
  97.  * @param value String
  98.  * @throws SQLException
  99.  */
  100. public static void writeBlobUTF16BinaryStream(String query, int idForQuery, String value) throws Exception
  101. {
  102. PreparedStatement p = null;
  103. ResultSet rs = null;
  104. OutputStream blobWriter = null;
  105. try {
  106. p = JForumExecutionContext.getConnection().prepareStatement(query);
  107. p.setInt(1, idForQuery);
  108. rs = p.executeQuery();
  109. rs.next();
  110. Blob text = rs.getBlob(1);
  111. if (text instanceof BLOB) {
  112. blobWriter = ((BLOB) text).getBinaryOutputStream();
  113. }
  114. else {
  115. blobWriter = text.setBinaryStream(0);
  116. }
  117. blobWriter.write(value.getBytes("UTF-16"));
  118. blobWriter.close();
  119. }
  120. catch (IOException e) {
  121. throw new DatabaseException(e);
  122. }
  123. finally {
  124. if (blobWriter != null) {
  125. blobWriter.close();
  126. }
  127. DbUtils.close(rs, p);
  128. }
  129. }
  130. }