import java.sql.*;
import java.util.*;

public class Ex5
{
    Connection mainConnection = null;
    Statement mainStatement = null;
    PreparedStatement SecondStatement = null;
    Statement ThirdStatement = null;
    ResultSet mainResultSet = null;

    public static void main(String args[])
    {
 Ex5 e = new Ex5();
    }

    public Ex5()
    {
        ConnectToDB();
 
 PublishData();
 
 SearchAllTuples();

 ShowMetaData();

 ShowAllTuples();
 

 ShowSomeTuples();
 
 
 

    }
 

    public void SearchAllTuples()
    {
 try
 {
     System.out.println(" ** Selecting all tuples in the table **" );
     mainResultSet = mainStatement.executeQuery( "select * from info; " );
 }
 catch( Exception e )
 { System.out.println( " Error : " + e.toString() ); }
    }

    public void ShowMetaData()
    {
 try
 {
     System.out.println("\n ** Obtaining Meta Data ** " );
     ResultSetMetaData meta = mainResultSet.getMetaData();
     for( int col=1; col<=meta.getColumnCount(); col++ )
  System.out.println( "Column: " + meta.getColumnName(col) + "\t, Type: " + meta.getColumnTypeName(col) );
 }
 catch( Exception e )
 { System.out.println( " Error : " + e.toString() ); }

    }

    public void ShowAllTuples()
    {
 try
 {
 
     ResultSetMetaData meta = mainResultSet.getMetaData();

     System.out.println("\n ** Showing all Tuples ** " );
     int tupleCount=1;
      while( mainResultSet.next() )
     {
  System.out.print( "Tuple " + tupleCount++ + " : " );
  for( int col=1; col<=meta.getColumnCount(); col++)
       System.out.print( "\""+mainResultSet.getString( col )+"\"," );
  System.out.println();
     }
        }
 catch( Exception e )
 { System.out.println(" Error : " + e.toString() ); }

 System.out.println();
    }

    public void ShowSomeTuples()
    {
 try
 {

     mainResultSet = ThirdStatement.executeQuery( "select * from info; ");
     ResultSetMetaData meta = mainResultSet.getMetaData();

     System.out.println("\n ** Showing some Tuples ** " );
 
     System.out.print("\nFirst Tuple: " );
      mainResultSet.next();
     for( int col=1; col<=meta.getColumnCount(); col++)
       System.out.print( "\""+mainResultSet.getString( col )+"\"," );

     System.out.print("\nNext Tuple: " );
      mainResultSet.next();
     for( int col=1; col<=meta.getColumnCount(); col++)
       System.out.print( "\""+mainResultSet.getString( col )+"\"," );
 
     System.out.print("\nPrev. Tuple: " );
      mainResultSet.previous();
     for( int col=1; col<=meta.getColumnCount(); col++)
       System.out.print( "\""+mainResultSet.getString( col )+"\"," );

     System.out.print("\n3rd Tuple: " );
      mainResultSet.absolute(3);
     for( int col=1; col<=meta.getColumnCount(); col++)
       System.out.print( "\""+mainResultSet.getString( col )+"\"," );

     System.out.println();
 }
 catch( Exception e )
 { System.out.println( "Exception : " + e.toString() ); }
    }
 
    public void ConnectToDB()
    {
 // loading Informix driver
 try
 {
         System.out.print("Looking for Informix's jdbc-odbc driver ... ");
            Class.forName("com.informix.jdbc.IfxDriver");
            System.out.println("loaded.\n");
 
     String URL = "jdbc:informix-sqli://esfahaan.usc.edu:1425";

            Properties p = new Properties();
            p.put("INFORMIXSERVER", "dimlab");
            p.put("database", "temp585");
            p.put("user", "temp585");
            p.put("password", "temp585");
 
            Connection mainConnection = DriverManager.getConnection(URL, p);

     mainStatement = mainConnection.createStatement();
     SecondStatement = mainConnection.prepareStatement( "insert into info values( ?, ?, ?, ? );" );
     ThirdStatement = mainConnection.createStatement(
                                         ResultSet.TYPE_SCROLL_INSENSITIVE,
                                         ResultSet.CONCUR_READ_ONLY);

       }
       catch( Exception e )
       {
     System.out.println( "Error connecting to DB: "+ e.toString() );
     System.exit(-1);
       }
    }

    public void PublishData()
    {
 try
 {
 
     System.out.print( "Deleting previous tuples ..." );
     mainStatement.executeUpdate( "delete from info;" );
     System.out.println( "Deleted." );

     System.out.print( "Inserting Initial Data ..." );
     mainStatement.executeUpdate( "insert into info values ('Clinton, Bill', '9876543210', 400000, 'Ex. White House');" );
     mainStatement.executeUpdate( "insert into info values ('Doll, Bob', '1234567890', 100000, 'House');" );
     mainStatement.executeUpdate( "insert into info values ('Bush, George', '6543210987', 450000, 'White House');" );
     mainStatement.executeUpdate( "insert into info values ('Gore, Al', '3210987654', 200000, 'donno');" );
     mainStatement.executeUpdate( "insert into info values ('Bing, Chandler', '4321056789', 750000, 'Friends');" );
     System.out.println( "Done.\n" );

 }
 catch( Exception e )
 { System.out.println( " Error 2: " + e.toString() ); }
    }
 

}