Datenbank-Schnittstelle in win98 einrichten
- Datenbank erstellen
- Datenbank-Treiber vom Datenbank-Hersteller herunterladen
- Datenbank-Treiber installieren mit Einstellungen -
Systemsteuerung - ODBC-Schnittstelle-32bit
JDBC in java-Programm aufrufen
- Treiber laden:
Class.forName( TreiberName );
- Connection herstellen:
getConnection( Datenbank, Benutzer, Passwort)
- Statement erzeugen:
createStatement();
- SQL-Abfragen losschicken und Resultset entgegennehmen:
ResultSet result = statement.executeQuery( "SELECT..." );
- Connection schliessen
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
- Anzeige der festeingestellten mySQL-Datenbank-Datei nebst User
- Textfeld zum Eingeben der SQL-Abfrage
- Button zum Abschicken der Abfrage an die Datenbank
- TextArea zum Anzeigen des Ergebnisses der Abfrage
Vorausgesetzt ist hier:
- die Datenbank und die Tabelle existieren
- die ODBC-Schnittstelle des Datenbank-Herstellers
ist in win98 installiert
- die Datenbank ist auf dem Rechner gestartet
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);
}
}
}