Thread

  1. JDBC tutorial code

    Neil Kidd <neil@kidd.org.uk> — 2000-12-12T11:55:06Z

    Hello,
    I have followed the JDBC tutorial code at 
    http://www.postgresql.org/devel-corner/docs/programmer/jdbc-lo.htm
    and keep getting an sqlException from the JDBC driver. I need to deal with 
    BLOBS. Text fields etc work fine.
    The exception states: InputStream not supported.
    
    The code is as follows:
    
    import java.sql.*;
    import java.io.*;
    
    public class dbtest
    {
       public static void main( String[] args )
       {
         // Load the driver
         try
         {
           // Load the driver class
           Class.forName( "org.postgresql.Driver" );
    
           // Define the data source for the driver
           String dbURL = "jdbc:postgresql://192.168.0.3/mynewdb";
    
           // Create a connection through the DriverManager
           Connection dbCon = DriverManager.getConnection( dbURL, USER , PASS );
    
           dbCon.setAutoCommit( false );
    
           File              file = new File( 
    "D:\\dev\\code\\dbtest\\jdbc7.0-1.2.jar" );
           FileInputStream   fis  = new FileInputStream( file );
           PreparedStatement ps   = dbCon.prepareStatement( "insert into test1 
    values (?,?)" );
    
           ps.setString( 1, file.getName() );
           ps.setBinaryStream( 2, fis, ( int )file.length() );
           ps.executeUpdate();
           ps.close();
           fis.close();
         }
         catch( ClassNotFoundException cnfe )
         {
           System.err.println( "1 " + cnfe );
         }
         catch( SQLException sqle )
         {
           System.err.println( "2 " + sqle );
           sqle.printStackTrace(System.err);
         }
         catch( FileNotFoundException fnfe )
         {
           System.err.println( "3 " + fnfe );
         }
         catch( IOException ioe )
         {
           System.err.println( "4 " + ioe );
         }
       }
    
    Thanks in advance for any help.
    Regards,
    Neil
    ----------------------------------------------------------------
    From:            Neil Kidd
    Website:        http://www.kidd.org.uk
    E-mail:           neil@kidd.org.uk
    ----------------------------------------------------------------
    
    
    
  2. Re: JDBC tutorial code

    Steve Waldman <swaldman@mchange.com> — 2000-12-12T18:00:07Z

    Neil,
    
    For some reason, postgres' JDBC driver doesn't implement
    PreparedStatement.setBinaryStream(). 
    Use PreparedStatement.setBytes() instead.
    
    Try this...
    
      InputStream is = new BufferedInputStream(
                         new FileInputStream( file ) );
      ByteArrayOutputStream baos = new ByteArrayOutputStream();
      for (int b = is.read(); b >=0; b = is.read()) 
         baos.write(b);
      ps.setBytes(2, baos.toByteArray());
    
    Hope this helps,
        Steve
    
    
    On Tue, Dec 12, 2000 at 11:55:06AM +0000, Neil Kidd wrote:
    >
    > Hello,
    > I have followed the JDBC tutorial code at 
    > http://www.postgresql.org/devel-corner/docs/programmer/jdbc-lo.htm
    > and keep getting an sqlException from the JDBC driver. I need to deal with 
    > BLOBS. Text fields etc work fine.
    > The exception states: InputStream not supported.
    > 
    > The code is as follows:
    > 
    > import java.sql.*;
    > import java.io.*;
    > 
    > public class dbtest
    > {
    >    public static void main( String[] args )
    >    {
    >      // Load the driver
    >      try
    >      {
    >        // Load the driver class
    >        Class.forName( "org.postgresql.Driver" );
    > 
    >        // Define the data source for the driver
    >        String dbURL = "jdbc:postgresql://192.168.0.3/mynewdb";
    > 
    >        // Create a connection through the DriverManager
    >        Connection dbCon = DriverManager.getConnection( dbURL, USER , PASS );
    > 
    >        dbCon.setAutoCommit( false );
    > 
    >        File              file = new File( 
    > "D:\\dev\\code\\dbtest\\jdbc7.0-1.2.jar" );
    >        FileInputStream   fis  = new FileInputStream( file );
    >        PreparedStatement ps   = dbCon.prepareStatement( "insert into test1 
    > values (?,?)" );
    > 
    >        ps.setString( 1, file.getName() );
    >        ps.setBinaryStream( 2, fis, ( int )file.length() );
    >        ps.executeUpdate();
    >        ps.close();
    >        fis.close();
    >      }
    >      catch( ClassNotFoundException cnfe )
    >      {
    >        System.err.println( "1 " + cnfe );
    >      }
    >      catch( SQLException sqle )
    >      {
    >        System.err.println( "2 " + sqle );
    >        sqle.printStackTrace(System.err);
    >      }
    >      catch( FileNotFoundException fnfe )
    >      {
    >        System.err.println( "3 " + fnfe );
    >      }
    >      catch( IOException ioe )
    >      {
    >        System.err.println( "4 " + ioe );
    >      }
    >    }
    > 
    > Thanks in advance for any help.
    > Regards,
    > Neil
    > ----------------------------------------------------------------
    > From:            Neil Kidd
    > Website:        http://www.kidd.org.uk
    > E-mail:           neil@kidd.org.uk
    > ----------------------------------------------------------------
    
    
  3. Re: JDBC tutorial code

    Neil Kidd <neil@kidd.org.uk> — 2000-12-12T19:17:55Z

    Steve,
    Thanks very much, it works a treat :-)))
    
    Merry xmas,
    Neil.
    
    At 13:00 12/12/00 -0500, you wrote:
    >Neil,
    >
    >For some reason, postgres' JDBC driver doesn't implement
    >PreparedStatement.setBinaryStream().
    >Use PreparedStatement.setBytes() instead.
    >
    >Try this...
    >
    >   InputStream is = new BufferedInputStream(
    >                      new FileInputStream( file ) );
    >   ByteArrayOutputStream baos = new ByteArrayOutputStream();
    >   for (int b = is.read(); b >=0; b = is.read())
    >      baos.write(b);
    >   ps.setBytes(2, baos.toByteArray());
    >
    >Hope this helps,
    >     Steve
    >
    >
    >On Tue, Dec 12, 2000 at 11:55:06AM +0000, Neil Kidd wrote:
    > >
    > > Hello,
    > > I have followed the JDBC tutorial code at
    > > http://www.postgresql.org/devel-corner/docs/programmer/jdbc-lo.htm
    > > and keep getting an sqlException from the JDBC driver. I need to deal with
    > > BLOBS. Text fields etc work fine.
    > > The exception states: InputStream not supported.
    > >
    > > The code is as follows:
    > >
    > > import java.sql.*;
    > > import java.io.*;
    > >
    > > public class dbtest
    > > {
    > >    public static void main( String[] args )
    > >    {
    > >      // Load the driver
    > >      try
    > >      {
    > >        // Load the driver class
    > >        Class.forName( "org.postgresql.Driver" );
    > >
    > >        // Define the data source for the driver
    > >        String dbURL = "jdbc:postgresql://192.168.0.3/mynewdb";
    > >
    > >        // Create a connection through the DriverManager
    > >        Connection dbCon = DriverManager.getConnection( dbURL, USER , 
    > PASS );
    > >
    > >        dbCon.setAutoCommit( false );
    > >
    > >        File              file = new File(
    > > "D:\\dev\\code\\dbtest\\jdbc7.0-1.2.jar" );
    > >        FileInputStream   fis  = new FileInputStream( file );
    > >        PreparedStatement ps   = dbCon.prepareStatement( "insert into test1
    > > values (?,?)" );
    > >
    > >        ps.setString( 1, file.getName() );
    > >        ps.setBinaryStream( 2, fis, ( int )file.length() );
    > >        ps.executeUpdate();
    > >        ps.close();
    > >        fis.close();
    > >      }
    > >      catch( ClassNotFoundException cnfe )
    > >      {
    > >        System.err.println( "1 " + cnfe );
    > >      }
    > >      catch( SQLException sqle )
    > >      {
    > >        System.err.println( "2 " + sqle );
    > >        sqle.printStackTrace(System.err);
    > >      }
    > >      catch( FileNotFoundException fnfe )
    > >      {
    > >        System.err.println( "3 " + fnfe );
    > >      }
    > >      catch( IOException ioe )
    > >      {
    > >        System.err.println( "4 " + ioe );
    > >      }
    > >    }
    > >
    > > Thanks in advance for any help.
    > > Regards,
    > > Neil
    > > ----------------------------------------------------------------
    > > From:            Neil Kidd
    > > Website:        http://www.kidd.org.uk
    > > E-mail:           neil@kidd.org.uk
    > > ----------------------------------------------------------------
    
    ----------------------------------------------------------------
    From:            Neil Kidd
    Website:        http://www.kidd.org.uk
    E-mail:           neil@kidd.org.uk
    ----------------------------------------------------------------