package server.db;

import java.sql.*;

public class SqlBean {

    private static String url = "jdbc:odbc:addresses";
    private static String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
    private static String userId = "";
    private static String password = "";
    private Connection c;
    private DatabaseMetaData dbmd;
    private boolean isReadOnly = false;
    private boolean usesLocalFiles = false;
    private String driverName = null;
    private String catalogName = null;
    private String productName = null;

    public static String getPassword() {
        return password;
    }

    public static String getUserId() {
        return userId;
    }

    public static String getDriver() {
        return driver;
    }

    public static String getUrl() {
        return url;
    }

    public boolean getUsesLocalFiles() {
        return usesLocalFiles;
    }

    public boolean getReadOnly() {
        return isReadOnly;
    }

    public String getCatalogName() {
        return catalogName;
    }

    public String getDriverName() {
        return driverName;
    }

    public String getProductName() {
        return productName;
    }

    public void setUserId(String _userId) {
        userId = _userId;
    }

    public void setPassword(String _password) {
        password = _password;
    }

    public void setUrl(String _url) {
        url = _url;
    }

    public void setDriver(String _driver) {
        driver = _driver;
    }

    public SqlBean() {
    }

    public void init() {
        try {
            Class.forName(driver);
            c = DriverManager.getConnection(url, userId, password);
            dbmd = c.getMetaData();
            catalogName =
                    c.getCatalog();
            isReadOnly = c.isReadOnly();
            usesLocalFiles =
                    dbmd.usesLocalFiles();
            driverName =
                    dbmd.getDriverName();
            productName =
                    dbmd.getDatabaseProductName();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        System.out.println("Opened Connection:" + url);
    }

    public void printInfo() {
        println("productName=" + productName);
        println("catalogName=" + catalogName);
        println("is ReadOnly=" + getReadOnly());
        println("usesLocalFiles=" + getUsesLocalFiles());
        println("driverName=" + driverName);
    }

    public void close() {
        try {
            c.close();
            System.out.println("closed connection");
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public ResultSet query(String sql) {
        try {
            Statement s = c.createStatement();
            return s.executeQuery(sql);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    public ResultSetMetaData getResultSetMetaData(ResultSet rs) {
        try {
            return rs.getMetaData();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    public int getColumnCount(ResultSetMetaData rsmd) {
        try {
            return rsmd.getColumnCount();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return 0;
    }

    public String[] getcolumnTypeNames(ResultSetMetaData rsmd) {
        int count = getColumnCount(rsmd);
        String sa [] = new String[count];
        try {
            for (int i = 0; i < sa.length; i++) {
                sa[i] = rsmd.getColumnTypeName(i);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return sa;
    }

    public String[]
            getRowAsString(ResultSet rs) {

        int N = getColumnCount(
                getResultSetMetaData(rs));
        String s[] = new String[N];
        try {
            for (int i = 0; i < N; i++)
                s[i] = rs.getString(i + 1);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return s;
    }

    public void print(ResultSet rs) {
        int i;
        String cn[] = getColumnNames(getResultSetMetaData(rs));
        println(cn);
        boolean more = false;
        while (more = nextRow(rs))
            println(getRowAsString(rs));
    }

    public void println(Object o) {
        System.out.println(o);
    }

    public void println(String s[]) {
        for (int i = 0; i < s.length; i++)
            System.out.print(s[i] + '\t');
        System.out.println();
    }

    public boolean nextRow(ResultSet rs) {
        try {
            return rs.next();
        } catch (SQLException e) {
            return false;
        }
    }

    public String[] getColumnNames(ResultSetMetaData rsmd) {
        String s []
                = new String[getColumnCount(rsmd)];
        try {
            for (int i = 1; i <= s.length; i++)
                s[i - 1] = rsmd.getColumnLabel(i);
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return s;
    }

    public DatabaseMetaData getDatabaseMetaData() {
        return dbmd;
    }

    public void insert(String sql) {
        try {
            Statement s = c.createStatement();
            int insertResult = s.executeUpdate(sql);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public static void main(String args[]) {
        SqlBean sb = new SqlBean();
        sb.init();
        sb.printInfo();
        sb.close();
    }

}