Blobs.java Source code

Java tutorial

Introduction

Here is the source code for Blobs.java

Source

/*
    
Database Programming with JDBC and Java, Second Edition
By George Reese
ISBN: 1-56592-616-1
    
Publisher: O'Reilly
    
*/

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

/**
 * Example 4.2.
 */
public class Blobs {
    public static void main(String args[]) {
        if (args.length != 1) {
            System.err.println("Syntax: <java Blobs [driver] [url] " + "[uid] [pass] [file]");
            return;
        }
        try {
            Class.forName(args[0]).newInstance();
            Connection con = DriverManager.getConnection(args[1], args[2], args[3]);
            File f = new File(args[4]);
            PreparedStatement stmt;

            if (!f.exists()) {
                // if the file does not exist
                // retrieve it from the database and write it to the named file
                ResultSet rs;

                stmt = con.prepareStatement("SELECT blobData " + "FROM BlobTest " + "WHERE fileName = ?");

                stmt.setString(1, args[0]);
                rs = stmt.executeQuery();
                if (!rs.next()) {
                    System.out.println("No such file stored.");
                } else {
                    Blob b = rs.getBlob(1);
                    BufferedOutputStream os;

                    os = new BufferedOutputStream(new FileOutputStream(f));
                    os.write(b.getBytes(0, (int) b.length()), 0, (int) b.length());
                    os.flush();
                    os.close();
                }
            } else {
                // otherwise read it and save it to the database
                FileInputStream fis = new FileInputStream(f);
                byte[] tmp = new byte[1024];
                byte[] data = null;
                int sz, len = 0;

                while ((sz = fis.read(tmp)) != -1) {
                    if (data == null) {
                        len = sz;
                        data = tmp;
                    } else {
                        byte[] narr;
                        int nlen;

                        nlen = len + sz;
                        narr = new byte[nlen];
                        System.arraycopy(data, 0, narr, 0, len);
                        System.arraycopy(tmp, 0, narr, len, sz);
                        data = narr;
                        len = nlen;
                    }
                }
                if (len != data.length) {
                    byte[] narr = new byte[len];

                    System.arraycopy(data, 0, narr, 0, len);
                    data = narr;
                }
                stmt = con.prepareStatement("INSERT INTO BlobTest(fileName, " + "blobData) VALUES(?, ?)");
                stmt.setString(1, args[0]);
                stmt.setObject(2, data);
                stmt.executeUpdate();
                f.delete();
            }
            con.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}