package com.sun.jdbc.samples;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import java.math.BigDecimal;
import java.math.*;
import java.util.StringTokenizer;


public class BitTest {
    List<Drivers>  drivers;
    
    public static void main(String args[]){
        BitTest test = new BitTest();
        test.runTest();
        
    }
    
    public BitTest() {
        drivers = new ArrayList<Drivers>();
        
        
        
        // Postgresql Drivers
        drivers.add(new Drivers("org.postgresql.Driver", "jdbc:postgresql://jsepc18.east:5432/CTS5", "cts1", "cts1" ));
        
        
        
    }
    
    public void runTest() {
        Connection con = null;             
        
        for(Drivers driver : drivers){
            try {
                Class.forName(driver.getDriver());
                con = DriverManager.getConnection(driver.getUrl(), driver.getUser(), driver.getPassword());

                dumpVersionInfo(con);
                testSetObject48(con);
                con.close();
            }catch( Exception e ) {
                e.printStackTrace();
            }
            
        }
        
        
        
    }
    
    
    public static void dumpVersionInfo(Connection con) {
        
        try {
            System.out.println("\n***********************************************");
            DatabaseMetaData dbmeta = con.getMetaData();
            String productName = dbmeta.getDatabaseProductName();
            String productVersion = dbmeta.getDatabaseProductVersion();
            String driverName = dbmeta.getDriverName();
            String driverVersion = dbmeta.getDriverVersion();
            
            System.out.println("productName: " + productName);
            System.out.println("productVersion: " + productVersion);
            System.out.println("driverName: " + driverName);
            System.out.println("Version: " + driverVersion);
            
            System.out.println("***********************************************");
            
        } catch( Exception e ) {
            e.printStackTrace();
        }
    }
    
    private static void testSetObject48(Connection conn) {
        ResultSet rs;
        String Min_Val_Query= "SELECT MIN_VAL from Bit_Tab";
        String sMaxBooleanVal = "1";
        //sMaxBooleanVal = "true";
        Boolean bool = Boolean.valueOf("true");
        //String Min_Insert= "insert into Bit_Tab values(1::bit, 0::bit, null )";
        String Min_Insert= "insert into Bit_Tab values('1', '0', null)";
        //System.out.println("Value to insert=" + extractVal(Min_Insert,1));
        CallableStatement cstmt;
        try {
            Statement stmt = conn.createStatement();
            stmt.executeUpdate("delete from Bit_Tab");
            stmt.executeUpdate(Min_Insert);
            cstmt = conn.prepareCall("{call Bit_In_Min(?)}");
            cstmt.setObject(1,sMaxBooleanVal,java.sql.Types.BIT);
            //cstmt.setObject(1,bool,java.sql.Types.BIT);
            cstmt.executeUpdate();
            
            rs = stmt.executeQuery(Min_Val_Query);
            while(rs.next()){
                System.out.println("Expected value=" + sMaxBooleanVal + ", Returned value as Boolean= " +rs.getBoolean(1)
                + ", as String=" + rs.getString(1));
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        
        
    }
    
    public static String extractVal(String insertString, int count) {
        //String sKeyName = null,insertString=null;
        String retStr=null,parameters=null;
        StringTokenizer sToken=null;
        try {
            //sKeyName=sTableName.concat("_Insert");
            
            //insertString=sqlProps.getProperty(sKeyName,"");
            
            parameters=insertString.substring(insertString.indexOf("(",1)+1,insertString.indexOf(")",1));
            
            sToken= new StringTokenizer(parameters,",");
            int i=1;
            do
            {
                retStr=(String) sToken.nextElement();
            }
            while(count!=i++);
            
            return retStr;
        } catch(Exception e) {
            System.out.println("Exception " + e.getMessage());
            
        }
        
        return retStr;
    }
    
    
}
