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

public class JDBCXML {
	public static void main(String[] args) {
		try {
			Class.forName("com.sunopsis.jdbc.driver.xml.SnpsXmlDriver");
		} catch (ClassNotFoundException cnfe) {
			System.err.println("Driver class not found");
			cnfe.printStackTrace();
		}
		Connection con = null;
		try {
			con = (Connection) DriverManager.getConnection("jdbc:snps:xml");
		} catch (SQLException e1) {
			System.err.println("Error establishing database connection");
			Throwable t = sqle;
			while (t != null) {
   			System.err.println("Type: " + t.getClass().getName());
      		System.err.println("Message: " + t.getMessage());
      		System.err.println("-----");
      		t = t.getCause();
			}
		}
		Statement stmt = null;
		try {
			stmt = con.createStatement();
		} catch (SQLException sqle) {
			Throwable t = sqle;
			while (t != null) {
   			System.err.println("Type: " + t.getClass().getName());
      		System.err.println("Message: " + t.getMessage());
      		System.err.println("-----");
      		t = t.getCause();
			}
		}
		try {
			stmt.execute("load file \"employee.xml\" on schema EMP readonly");
			stmt.execute("set schema EMP");
			ResultSet rs = con.getMetaData().getTables("", "EMP", "%", null);

			while (rs.next()) {
				System.out.println("TABLE=" + rs.getString("TABLE_NAME"));
				System.out.print("(");
				ResultSet colRS =
					con.getMetaData().getColumns(
						"",
						"EMP",
						rs.getString("TABLE_NAME"),
						"%");
				while (colRS.next()) {
					System.out.println(colRS.getString("COLUMN_NAME") + ",");
				}
				System.out.println(")\n");
			}
		} catch (SQLException sqle) {
			Throwable t = sqle;
			while (t != null) {
   			System.err.println("Type: " + t.getClass().getName());
      		System.err.println("Message: " + t.getMessage());
      		System.err.println("-----");
      		t = t.getCause();
			}
		}

		ResultSet rs = null;
		try {
			rs = (ResultSet) stmt.executeQuery("SELECT * FROM EMPLOYEE;");
			while (!rs.isLast()) {
				rs.next();
				System.out.println(rs.getString("FNAME"));
			}
		} catch (SQLException sqle) {
			Throwable t = sqle;
			while (t != null) {
   			System.err.println("Type: " + t.getClass().getName());
      		System.err.println("Message: " + t.getMessage());
      		System.err.println("-----");
      		t = t.getCause();
			}
		}

		try {
			stmt.executeUpdate("INSERT INTO EMPLOYEE (FNAME, MINIT, LNAME) VALUES('James', 'E', 'Borg');");
		} catch (SQLException sqle) {
			Throwable t = sqle;
			while (t != null) {
   			System.err.println("Type: " + t.getClass().getName());
      		System.err.println("Message: " + t.getMessage());
      		System.err.println("-----");
      		t = t.getCause();
			}
		}

	}
}
