// PROGRAMMED BY   : MOHAMMAD ALJADA
// DOWNLOADED FROM : WWW.GEOCITIES.COM/MOHJADA
// PROGRAM         : DataBase

import java.sql.*;				//SQL class
import javax.swing.*;			//swing for display
import java.awt.*;				//
import java.awt.event.*;		//for event listener
import java.util.*;				//

class class1
{
	public static void main(String args[])
	{
	datab b=new datab();		//make object from datab class
	}
}

//------------------------------------------------------------
class datab extends JFrame 		//datab class
{
private Connection c;			//manage the connection between program and the DATABSE
								//c : reference to an object that implements interface connectio
private JTable t;				//t : Table to view database

public datab ()					//Contructor
{
String url="jdbc:odbc:books";	//Protocol for communication:sub protocol:DB name
String username="anonymous";	//Usernae for login
String password="guest";		//Password for login
	try
	{							//Load Driver
	Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");			//package...chass have definition for driver (load driver)
	c=DriverManager.getConnection(url,username,password);	//in java.SQL , load DATABASE
	}
	catch (ClassNotFoundException cnfex){}		//Driver error
	catch (SQLException sqlex) {}				//DataBase error
getTable();						//function to load table
setSize(450,150);				//size of view window
show();							//show view window
}

private void getTable()			//Query the DB the call display results
{
Statement s;					//interface in java.sql : submit query to DB
ResultSet r;					//interface in java.sql : will contain the results of the query
								//and allow programmers to mainpulate it
	try
	{
	String q="select * from authors";	//Hardcode (code in your program)
	s=c.createStatement();				//returns an object that implements the statement interface
	r=s.executeQuery(q);				//now query the DB and return an object contains the resuls
	displayResultSet(r);				//Display DB query results function
	s.close();							//close statement
	} catch (SQLException sqlex) {}
}

private void displayResultSet(ResultSet rs) throws SQLException	//to display results
{
boolean m=rs.next();
if (!m) { //if there is no records
JOptionPane.showMessageDialog(this,"No records found");	//show message
setTitle("No Records");		//title of message
return;		//return null
}
setTitle("Authors Table");			//set title
Vector columnHeads=new Vector();	//return colume headers
Vector rows=new Vector();			//return rows data
	try
	{
	ResultSetMetaData rsmd=rs.getMetaData();		//get column headers
	for(int i=1;i<=rsmd.getColumnCount();++i)		//loop all columns
	columnHeads.addElement(rsmd.getColumnName(i));	//add column headers
	do{ rows.addElement(getNextRow(rs,rsmd)); } while (rs.next());	//get row data
	t=new JTable(rows,columnHeads);					//display table with result contents
	JScrollPane scroller=new JScrollPane(t);		//add scroll if needed
	getContentPane().add(scroller,BorderLayout.CENTER);	//view port
	validate();
	} catch(SQLException sqlex) {}
}

private Vector getNextRow(ResultSet rs,ResultSetMetaData rsmd) throws SQLException
{ //load next row in DB
Vector currentRow=new Vector();					//Current row
for(int i=1;i<=rsmd.getColumnCount();i++)		//loop columns
	switch(rsmd.getColumnType(i))				//get type of data in column
	{
	case Types.VARCHAR:currentRow.addElement(rs.getString(i));			//if type is CHAR
	break;
	case Types.INTEGER:currentRow.addElement(new Long(rs.getLong(i)));	//if type is INTEGER
	break;
	//default: System.out.println("Type was: " + rsmd.get(domnType(i)));
	}
return currentRow;		//return row with data
}
}