title: Create Java on Oracle database with JDBC
body: <p>I'm trying to create a Java source object on an oracle database using JDBC.</p>
  
  <p>The source I want to create is the following:</p>
  
  <pre><code>create or replace and resolve java source named "BlobIO" as package dbjava;
  
  
  import java.sql.Connection;
  import java.sql.DriverManager;
  import java.sql.ResultSet;
  import java.sql.SQLException;
  import java.sql.Statement;
  import java.io.*;
  
  
  public class BlobIO {
  
      /**
       * Stores a blob into a local file (or even UNC-path)
       * @param blob The blob locator that should be stored in a file
       * @param filename The filename to write to
       * @param bufferSize The buffer size for data transfer
       * @return 1 if successful, 0 if failed
       */
      public static int blobToFile(java.sql.Blob blob, String filename, int bufferSize)
      {
          OutputStream os = null;
          InputStream is = null;
          boolean fail = true;
          try {
  
              is = blob.getBinaryStream();
              os = new FileOutputStream(filename);
              int amountRead = 0;
              byte[] buffer = new byte[bufferSize];
              while ((amountRead = is.read(buffer, 0, buffer.length)) != -1) {
                  os.write(buffer, 0, amountRead);
              }
              is.close();
              os.flush();
              os.close();
              fail = false;
          } catch (IOException ex) {
              new File(filename).delete();
              System.err.println("Could not store blob to file.");
              System.err.println("File : " + filename);
              System.err.println("Reason : " + ex.getClass().getName() + " : " + ex.getMessage());
              fail = true;
          } catch (SQLException ex) {
              new File(filename).delete();
              System.err.println("Could not store blob to file.");
              System.err.println("File : " + filename);
              System.err.println("Reason : " + ex.getClass().getName() + " : " + ex.getMessage());
              fail = true;
          } finally {
              try {is.close();} catch (Exception ex) {}
              try {os.flush();} catch (Exception ex) {}
              try {os.close();} catch (Exception ex) {}
          }
          return fail? 0:1;
      }
  
      /**
       * Stores a blob into a local file (or even UNC-path)
       * @param query The query that should select ONLY the blob field
       * @param filename The filename to write to
       * @param bufferSize The buffer size for data transfer
       * @return 1 if successful, 0 if failed
       */
      public static int blobToFile(String query, String filename, int bufferSize) {
          try {
              Connection conn = DriverManager.getConnection("jdbc:default:connection:");
              Statement stmt = conn.createStatement();
              ResultSet rset = stmt.executeQuery(query);
              InputStream is;
  
  
              if (rset.next())
              {
                  int ret = blobToFile(rset.getBlob(1), filename, bufferSize);
                  if (rset.next())
                  {
                      new File(filename).delete();
                      System.err.println("Could not store blob to file.");
                      System.err.println("Blob query : " + query);
                      System.err.println("File : " + filename);
                      System.err.println("Reason : too many rows");
                      rset.close();
                      stmt.close();
                      return 0;
                  } else {
                      rset.close();
                      stmt.close();
                      return ret;
                  }
              } else {
                  System.err.println("Could not store blob to file.");
                  System.err.println("Blob query : " + query);
                  System.err.println("File : " + filename);
                  System.err.println("Reason : no records retrieved by query");
                  rset.close();
                  stmt.close();
                  return 0;
              }
          } catch (Exception e) {
              System.err.println(e.getMessage());
              return 0;
          }
  
      }
  
  }
  /
  </code></pre>
  
  <p>I have tried with a <code>CallableStatement</code> using the execute method and this gives me the <code>error: "Missing IN/OUT parameters"</code>
  When I try using the execute method on a normal <code>Statement</code> object I get the error: "</p>
  
  <pre><code>Non supported SQL92 token at position: 262"
  </code></pre>
  
  <p>Anyone has any idea what I'm doing wrong? Can't seem to find anything on google either.</p>
  
  <p>EDIT:
  This the code I use to try to execute the script (the String <code>sql</code> contains the script you can see above, the variable <code>conn</code> is the <code>Connection</code> object.</p>
  
  <pre><code>CallableStatement stat = conn.prepareCall(sql);
  stat.setEscapeProcessing(false);
  stat.execute();
  </code></pre>
  
  <p>If i try with just Statement it is this:</p>
  
  <pre><code>Statement stat = conn.createStatement();
  stat.execute(sql);
  </code></pre>