Java Programming Home Page: Archive: Message #127

Date: Nov 12 2000 16:14:59 EST
From: "Java Programming" <javaProgramming-owner@listbot.com>
Subject: sw409, jdbc example

Hi All,
Here is is an example of a program that reads
a database and gives you information about it...

Enjoy!
Regards,
  - DL

import java.net.URL;
import java.sql.*;
import java.util.*;
import java.awt.*;
public class SimpleSelect {
	private String url = 
		"jdbc:odbc:yourDataSourceName";
	private String query = 
		"SELECT * FROM ";
	private String driverClassName =
		"sun.jdbc.odbc.JdbcOdbcDriver";
		
	private Connection con = null;
	private String catalogName = null;
	private DatabaseMetaData dma = null;
	private Statement stmt = null;
	private ResultSet rs = null;
	private ResultSetMetaData rsmd = null;
	private String keywords = null;
	private boolean isReadOnly = false;
	private boolean usesLocalFiles = false;
	private String driverName = null;
	
	private String selectedTable = null;
	
	private ResultSet tables_rs = null;
	private ResultSetMetaData
		tables_rsmd = null;
	private String tableFields[]=null;
	
	private Vector tableVector = 
		new Vector();
	private String tableNames[] = null;
	
	private String nonMSysTables[] = null;
	
	private Vector v = null;
	
	
public void connect() {
	try {
		loadDriver();
		//DriverManager.setLogStream(System.out);
		con = 
			DriverManager.getConnection (
				url, "", "");
		dma = con.getMetaData ();
			catalogName =
			con.getCatalog();
		isReadOnly = con.isReadOnly();
		usesLocalFiles =
			dma.usesLocalFiles();
		driverName =
			dma.getDriverName();		

		initTableNames();
		createStatement();
		
		}
	catch(SQLException e) {
		print(e);
	}
}
public String getSelectedTable() {	
	return selectedTable;
}
public void createStatement() {
	try {
		stmt = con.createStatement ();
	}
	catch(SQLException e) {
		print(e);
	}
}

public void printKeywords() {
	println("Non SL92 keywords:");
	println(getKeywords());
}
public String[] getNonMSysTableNames() {
	return nonMSysTables;
}
public void initNonMSysTables() {
	int n
		= tableNames.length -
			getNumberOfMSysTables();
	nonMSysTables = new String[n];
	for (int i=0; i < n; i++) {
		nonMSysTables[i]
			= tableNames[i+getNumberOfMSysTables()];
	}

}

private int getNumberOfMSysTables() {
	int k = 0;
	for (int i=0; i < tableNames.length; i++) 
		if (tableNames[i].startsWith("MSys"))
		     k++;
	return k;
}
private void initTableNames() {
	try {
		tables_rs =
			dma.getTables(
				null,
				null,null,null);
		tables_rsmd =
			tables_rs.getMetaData();
		tableFields = 
			getColumnNames(tables_rsmd);			
		while (tables_rs.next()) 
			tableVector.addElement(
				tables_rs.getString("TABLE_NAME"));
		}
	catch(SQLException e) {
		print(e);
	}
	int n = tableVector.size();
	tableNames =
		new String[n];
	for (int i=0; i < n; i++) 
		tableNames[i]
			= (String)
				tableVector.elementAt(i);
	initNonMSysTables();
	
}

public String[] getTableNames() {
	return tableNames;
}
public void printProductName() {
	print("The database product name is:");
	println(getProductName());
}
public String getProductName() {
	try {
		return 
			dma.getDatabaseProductName();
	}
	catch (SQLException e) {
		print(e);
	}
	return null;
}
public void printTableTypes() {
	println("The table types are:");
	ResultSet rs 
		= getTableTypes();
	try {
	  	while (rs.next()) {
			String s=rs.getString("TABLE_TYPE");
			println("   "+s);
			}
		}
	catch(SQLException e) {
		print(e);
	}
	
}

public ResultSet getTableTypes() {
	try {
		return 
			dma.getTableTypes();
	}
	catch (SQLException e) {
		print(e);
	}
	return null;
}
/**
	keywords that are not also SQL92 keywords.
*/	
public String getKeywords() {
	try {
		return 
			dma.getSQLKeywords();
	}
	catch (SQLException e) {
		print(e);
	}
	return null;
}
private void loadDriver() {
  try {
	Class.forName (
		driverClassName);
  }
  catch(ClassNotFoundException e) {
  	println(e);
  }
}

public void printInfo() {
	printProductName();
	println("catalogName="+catalogName);
	printTableTypes();
	printKeywords();
	println("is ReadOnly="+getReadOnly());
	println("usesLocalFiles="+getUsesLocalFiles());
	println("driverName="+driverName);
	println("tableFields=");
	print(tableFields);
	println("tableNames=");
	print(tableNames);
	println("number of MSysTables="
		+getNumberOfMSysTables());
	println("Non MSysTables=");
	print(getNonMSysTableNames());

}
public boolean getUsesLocalFiles() {
	return usesLocalFiles;
}
public boolean getReadOnly() {
	return isReadOnly;
}
public String getCatalogName() {
	return catalogName;
}



public String getDriverName() {
	return driverName;
}

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

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

public void getQuery() {
	getQuery("yourTableName");
}

public void getQuery(String _selectedTable) {
	selectedTable = _selectedTable;
	query = 
		"SELECT * FROM "+selectedTable;
	try {
	 rs = stmt.executeQuery (query);
	 rsmd = rs.getMetaData ();
	}
	catch(SQLException e) {
		print(e);
	}
}

public void setQuery(String q) {
	query = q;
	rs = null;
}

public void printDebug() {
	try {
		checkForWarning (con.getWarnings ());
		println("\nConnected to " + dma.getURL());
		println("Driver " +
			dma.getDriverName());
		println("Version " +
			dma.getDriverVersion());
		println("");
	}
	catch(SQLException e) {
		print(e);
	}
}

public void display() {
	try {
		dispResultSet();
	}
	catch(SQLException e) {
		print(e);
	}
}
private void print(SQLException ex) {
	println ("\n*** SQLException caught ***\n");
	while (ex != null) {
		println ("SQLState: " +
			ex.getSQLState ());
		println ("Message: " + ex.getMessage ());
		println ("Vendor: " +
			ex.getErrorCode ());
		ex = ex.getNextException ();
		println ("");
	}
	// Got some other type of exception. Dump it.
	ex.printStackTrace ();
}

public void print(String s[]) {
	for (int i=0; i < s.length; i++)
		print(s[i]+",");
	println("");
}
public void close() {
	try {
		rs.close();
		stmt.close();
		con.close();
	}
	catch(SQLException e) {
		print(e);
	}
}
public static void main (String args[]) {
	SimpleSelect ss
		= new SimpleSelect();
	ss.connect();
	ss.getQuery();
	ss.printColumnNames();
	ss.printInfo();
	//ss.printRows();
	ss.close();
}
//-------------------------------------------------------------------
// checkForWarning
// Checks for and displays warnings. Returns true if a warning
// existed
//-------------------------------------------------------------------
private boolean checkForWarning(SQLWarning warn)
throws SQLException {
	boolean rc = false;
	// If a SQLWarning object was given, display the
	// warning messages. Note that there could be
	// multiple warnings chained together
	if (warn != null) {
	println ("\n *** Warning ***\n");
	rc = true;
	while (warn != null) {
		println ("SQLState: " +
		warn.getSQLState ());
		println ("Message: " +
		warn.getMessage ());
		println ("Vendor: " +
			warn.getErrorCode ());
		println ("");
		warn = warn.getNextWarning ();
		}
	}
	return rc;
}
public String[] getColumnNames() {		
	return getColumnNames(rsmd);
}
public String[] getColumnNames(ResultSetMetaData r) {
	String s []
		= new String[getNumberOfColumns(r)];
	try {
		for (int i=1; i <= s.length; i++) 
			s[i-1]=r.getColumnLabel(i);
		}
	catch(SQLException e) {
		print(e);
	}
		
	return s;
}

public String[] getColumnNames(ResultSet r) {
	ResultSetMetaData
		rsd = null;
	try {
		return 
			getColumnNames(
				r.getMetaData());
	}
	catch(SQLException e) {
		print(e);
	}
	return null;
}

public Label[] getColumnLabels() {
	String s[] 
		= getColumnNames();
	Label l[] = new Label[s.length];
	for (int i=0; i < s.length; i++)
		l[i]=new Label(s[i]);		
	return l;	
}
public void printNumberOfColumns() {
	System.out.println(
		getNumberOfColumns());
}
public int getNumberOfColumns() {
	return getNumberOfColumns(rsmd);	 
}

private int getNumberOfColumns(ResultSetMetaData r) {
	int i = -1;
	try {
		i = r.getColumnCount();
	}
	catch(SQLException e) {
		print(e);
	}
	return i;		 
}

public void printColumnNames() {
	String s[] = getColumnNames();
	for (int i=0; i < s.length; i++)
		print(s[i]+",");
	println("");
}
public String [] getRowAsString() {
	int N = getNumberOfColumns();
	String s[] = new String[N];
	try {
		for (int i =0; i < N; i++)
			s[i] = rs.getString(i+1);
	}
	catch(SQLException e) {
		print(e);
	}
	return s;
}
public void printVector() {
	for (int i=0; i < v.size(); i++) {
		String s[]
			= getRowAt(i);
		print(s);
	}
}
public int getNumberOfRows() {
	return v.size();
}
public String[] getRowAt(int i) {
	if (v == null) {
		println("v is null in simple select");
		return null;
	}
	if (i >= v.size()) i = v.size() -1;
	if (i < 0) i = 0;
	return (String[])v.elementAt(i);
}
public void printRow() {
	String s[]
		= getRowAsString();
	for (int i=0; i < s.length; i++) {
		print(s[i]+", ");
	}
	println("");
}
/**
	Download entire database!
	Danger Will Robinson, 
	Take cover Dr. Smith!!
*/
public Vector getRows() {
	if (v != null) return v;
	v = new Vector();
	while(nextRow())
		v.addElement(getRowAsString());	
	return v;	
}
public void printRows() {
	while(nextRow())
		printRow();		
}

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


//-------------------------------------------------------------------
// dispResultSet
// Displays all columns and rows in the given result set
//-------------------------------------------------------------------
private void dispResultSet() throws SQLException {
	int i;
	printColumnNames();
	// Display data, fetching until end of the result set
	boolean more = rs.next ();
	int numCols = getNumberOfColumns();
	while (more) {
		// Loop through each column, getting the
		// column data and displaying
		for (i=1; i<=numCols; i++) {
			if (i > 1) 	print(",");
			print(rs.getString(i));
		}
		println("");
		// Fetch the next result set row
		more = rs.next ();
	}
}

}