JDBC und java.sql


Datenbank-Schnittstelle in win98 einrichten

JDBC in java-Programm aufrufen

Klassen und Interfaces aus java.sql.*

DriverManager

class DriverManager{
/* diese Klasse lädt bei ihrer eigenen Initialisierung 
die vorhandenen Datenbank-Treiber.
*/
public static Connection getConnection( String Datenbank-URL,
						String Benutzer,
						String Passwort )
{
/* sucht passenden Treiber für die btr.
Datenbank-URL aus und stellt die Verbindung her.
Diese Verbindung implementiert ein Interface:
*/
}
}

Connection

interface Connection
{
/* repräsentiert 1 Sitzung mit 1 Datenbank.
*/
public abstract Statement createStatement();
}

Statement

interface Statement
{
/* führt einen SQL-Befehl aus und nimmt Resultat auf
*/
public abstract ResultSet executeQuery( String SQL-Befehl );
}

ResultSet

interface ResultSet
{
public abstract boolean result.next(){
/* stellt den Cursor auf die nächste Zeile 
*/
}
public abstract ResultSetMetaData getMetaData(){
}

ResultSetMetaData

interface ResultSetMetaData
{
/*Informationen über den Resultset
*/
public abstract int getColumnCount(){
/*Anzahl der Felder 
*/
}
 public abstract String getColumnTypeName(int column)
{
/*Namen der Datentypen, und zwar unter anderem:
	char,
	varchar,
	date,
	int unsigned,
	double
*/
}
public abstract String getColumnName(int column){
}
}

Einfaches Bsp:

import java.net.URL;
import java.sql.*;

class Abfrage
{
public static void main (String args[])
{
	try
	{
	//DB-Treiber laden:
	Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 

	//Connection zur btr. DB herstellen, d.h. Sitzung eroeffnen:
	String DBurl = "jdbc:odbc:menagerie";
	String Benutzer = "Andreas";
	String Passwort = "";
	Connection connection = 
		DriverManager.getConnection( DBurl, Benutzer, Passwort);

	//Statement fuehrt SQL-Statements aus und nimmt dessen Ergebnis auf:
	Statement statement = connection.createStatement();
	dbout(statement);
	} 
	catch(java.lang.ClassNotFoundException e)
	{
		System.out.println("JDBC-ODBC-Treiber nicht gefunden");
	} 
	catch(java.sql.SQLException e)
	{
	System.out.println("Fehler beim Abfragen der Datenbank");
	}
}

private static void dbout(Statement statement) 
	throws java.sql.SQLException
{
	 
	ResultSet result = statement.executeQuery("SELECT article, price, dealer FROM shop order by article");

	while (result.next()) 
	{
		String Artikel = result.getString("article");
		String Preis = result.getString("price");
		String Lieferant = result.getString("dealer");
 
		System.out.println( Artikel + ", " + Lieferant + ", "  + Preis);
	}
	result.close();
}
}

Ausführliches Bsp

Der folgende screenshot zeigt einen Frame mit Vorausgesetzt ist hier:
import java.sql.*;
import java.awt.*; 
import java.awt.event.*; 

class AbfrageFrame extends Frame implements ActionListener
{
	//der Frame:
	Panel panel1 = new Panel();
	TextArea textArea1 = new TextArea();
	TextField textField1 = new TextField();
	TextField textField2 = new TextField();
	Button Button1 = new Button("Abf");
	
	//die Variablen:
	String Datenbank = "jdbc:odbc:menagerie";
	String Benutzer = "Andreas";
	String Passwort = "";
	String TreiberName = "sun.jdbc.odbc.JdbcOdbcDriver";

	//die Datenbank-Abfrage:
	Connection ConnectionObject;
	Statement StatementObject;
	String Abfrage;

public AbfrageFrame()
{
}
public AbfrageFrame(String Mitteilung)
{
	super(Mitteilung);
	setLayout(null);
	setSize(405,305);
	panel1.setLayout(null);
	add(panel1);
	panel1.setBounds(24,12,499,299);

	panel1.add(textArea1);
	textArea1.setBounds(12,96,432,188);

	panel1.add(textField1);
	textField1.setBounds(12,60,432,26);
	
	panel1.add(textField2);
	textField2.setBounds(12,36,432,21);
	textField2.setEditable(false);

	panel1.add(Button1 );
	Button1.setBounds( 456,60,43 ,21);
	Button1.addActionListener(this);	

	addWindowListener( new WA() ); 

	//Datenbank aufmachen:
	try
	{
	Class.forName( TreiberName ); 
	ConnectionObject = DriverManager.getConnection( Datenbank, 
							Benutzer, 
							Passwort);
	StatementObject = ConnectionObject.createStatement();
	}
	catch( SQLException s )
	{}
	catch( ClassNotFoundException c )
	{}
	textField2.setText( "Datenbank: "
				+Datenbank
				+"     Benutzer: "
				+ Benutzer );
}

public static void main( String [] args)
{
	AbfrageFrame AF = new AbfrageFrame( "DB" );
	AF.setSize( 567, 345 );
	AF.show();
}

public void actionPerformed( ActionEvent e )
{
	Abfrage = textField1.getText();
	try{
		abschicken(StatementObject, Abfrage);
	} 
	catch(SQLException ex)
	{
		textArea1.setText(ex.toString());
	}
	catch( NullPointerException n )
	{
		System.out.println("Bitte mySQL erst starten");
		System.exit(0);
	}
}

private void abschicken(Statement statement, String Query) throws SQLException, NullPointerException 
{
	ResultSet result = statement.executeQuery( Query );
	int i = result.getMetaData().getColumnCount();
	String Erg = "";
	for( int j = 1; j<=i; j++ ){
	 	Erg += (result.getMetaData().getColumnName( j )+"     "); 
	}
	Erg += "\n\n";
	while (result.next()) 
	{
		System.out.println();
		for( int j = 1; j<=i; j++ )
		{
			String datenTyp = result.getMetaData().getColumnTypeName(j);
			System.out.print( "DatenTyp: "+ j+": "+datenTyp+"    ");
 
			if( datenTyp.equals( "integer" ))
				Erg += ( result.getInt( j )+"   ");
			if( datenTyp.equals( "integer unsigned" ))
				Erg += ( result.getInt( j )+"   ");
			else if( datenTyp.equals( "char" ))	
				Erg += ( result.getString( j )+"   ");
			else if( datenTyp.equals( "varchar" ))	
				Erg += ( result.getString( j )+"   ");
			else if( datenTyp.equals( "date" ))	
				Erg += ( result.getString( j )+"   ");
			else if( datenTyp.equals( "double" ))
				Erg += (result.getDouble( j )+"   ");
		}
		Erg += ( "\n");
	}
	textArea1.setText( Erg ); 
	result.close();
}

class WA extends WindowAdapter
{
	public void windowClosing( WindowEvent e) 
	{
		try
		{
		ConnectionObject.close();
		}
		catch( SQLException exc )
		{}
		System.exit(0);
	}
}
}