//=================================================================
//                   PostgreSQL_JDBC Class
//=================================================================
//
//    This class is used to control the running of the a generic
// class to access the PostgreSQL database.
//
//                  << PostgreSQL_JDBC.java >>
//
//=================================================================
// Copyright (C) 2005-2010 Dana M. Proctor
// Version 1.01 02/13/2010
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version
// 2 of the License, or (at your option) any later version. This
// program is distributed in the hope that it will be useful, 
// but WITHOUT ANY WARRANTY; without even the implied warranty
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
// the GNU General Public License for more details. You should
// have received a copy of the GNU General Public License along
// with this program; if not, write to the Free Software Foundation,
// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
// (http://opensource.org)
//
//=================================================================
// Revision History
// Changes to the code should be documented here and reflected
// in the present version number. Author information should
// also be included with the original copyright author.
//=================================================================
// Version 1.0 12/23/2008 PostgreSQL Connection Main Application.
//         1.1 02/13/2010 Generalized to be Used With Any Test Case.
//         1.2 03/15/2010 Explicit Exception Output in main() & No
//             New Instance for Class.forName().
//         1.3 11/22/2010 Added testNullInsert().
//
//-----------------------------------------------------------------
//                 danap@dandymadeproductions.com
//=================================================================

//=================================================================
//                PostgreSQL_JDBC Application
//=================================================================

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;


/**
 * The PostgreSQL class is used to control the running of the a generic class to
 * access the PostgreSQL database. Arguments -debug.
 * @author Dana M. Proctor
 * @version 1.3 11/22/2010
 */

class PostgreSQL_JDBC2
{
   //============================================
   // Creation of the necessary class instance.
   //=============================================
   

   //==============================================================
   // PostgreSQL_JDBC Constructor
   //==============================================================

   public PostgreSQL_JDBC2(Connection con)
   {
      testNullInsert(con);
   }
   
   //==============================================================
   // Test Methods
   //==============================================================
   
   private void testNullInsert(Connection con)
   {
      // Method Instances
      String sqlStatementString;
      Statement sqlStatement;
      ResultSet rs;
      String identifierQuoteString = "\"";
      
      try
      {
         // Setup a connection statement.
         sqlStatement = con.createStatement();
         
         sqlStatementString = "INSERT INTO "
                              + identifierQuoteString + "public" + identifierQuoteString
                              + "." + identifierQuoteString + "test" +  identifierQuoteString
                              + " (" + identifierQuoteString + "id" + identifierQuoteString
                              + "," + identifierQuoteString + "name" + identifierQuoteString
                              + ") VALUES (null,'" + "aaa')";
         
         System.out.println(sqlStatementString);

         rs = sqlStatement.executeQuery(sqlStatementString);
 
         rs.close();
         sqlStatement.close();
      }
      catch (SQLException sqle)
      {
         System.out.println("SQL Exeception" + sqle);
      }
   }
   
   //============================================================
   // Main public access point method for instantiating the
   // PostgreSQL_JDBC application. Arguments: database, username,
   // & password.
   //==============================================================

   public static void main(String[] args)
   {
      String host, database, username, password;
      Connection dbConnection;

      // Collect connection properties. and setup connection.
      host = "localhost";
      dbConnection = null;

      if (args.length != 0)
      {
         database = args[0];
         username = (args.length > 1) ? args[1] : null;
         password = (args.length > 2) ? args[2] : null;
      }
      else
      {
         database = "my_database";
         username = "user";
         password = "password";
      }
      
      try
      {
         Class.forName("org.postgresql.Driver");
      }
      catch (ClassNotFoundException cne) {System.out.println("ClassNotFoundException"
                                          + cne.toString());}
      
      // Try to make a connection.
      try
      {
         dbConnection = DriverManager.getConnection("jdbc:postgresql://" + host + "/" + database,
                                                     username, password);
         // Connection Good.
         if (dbConnection != null)
         {
            System.out.println("Connection Created");
            
            // Go Do Something.
            new PostgreSQL_JDBC(dbConnection);
            
            // Close.
            dbConnection.close();
            System.out.println("Connection Closed");
         }
      }
      catch (SQLException sqle) {System.out.println("SQLExeception" + sqle.toString());}
   }
}