# Die Beispiele des Videoworkshops zum Thema JDBC



## Thomas Darimont (16. April 2005)

Hallo!

  Hier findet ihr nochmal alle Beispiele zu den Videoworkshop:

  MySQL:

```
/**
   * 
   */
  package de.tutorials.workshop.jdbc;
  
  import java.sql.Connection;
  import java.sql.ResultSet;
  import java.sql.ResultSetMetaData;
  import java.sql.Statement;
  
  import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
  
  /**
   * @author Tom
   * 
   * 
   * SET AUTOCOMMIT = 0; create table user(id int, name varchar(32), password
   * varchar(32)); insert into user values (0,'thomas', 'foo'); insert into user
   * values (1,'juergen', 'bar'); commit;
   * 
   * select * from user;
   * 
   * 
   */
  public class MySQLJDBCExample {
  
  	/**
  	 * @param args
  	 */
  	public static void main(String[] args) throws Exception {
		// Datasource Konfigurieren
  		MysqlDataSource mds = new MysqlDataSource();
  		mds.setUser("root");
  		mds.setPassword("");
  		mds.setPortNumber(3306);
  		mds.setServerName("localhost");
  		mds.setDatabaseName("test");
  
  		Connection con = null;
  
  		// create table user(id int not null, name varchar(32), password
  		// varchar(32), primary key(id));
  		// select * from user;
  
  		try {
  			con = mds.getConnection();
  			// // Autocommit deaktivieren
  			// con.setAutoCommit(false);
  
  			Statement stmt = con
 					.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
 							ResultSet.CONCUR_UPDATABLE);
  
  			// Daten auslesen:
  			// *
  			ResultSet rs = stmt.executeQuery("SELECT * FROM user");
  
  			// Datenbankspezifische Funktionen aufrufen
  			// ResultSet rs = stmt
 			// .executeQuery("SELECT {fn concat(\"Hallo, \",\"Welt!\")}");
  
  			// Über Abfrageergebnis iterieren
  			ResultSetMetaData rsmd = rs.getMetaData();
  			int clmCnt = rsmd.getColumnCount();
  
  			while (rs.next()) {
 				for (int i = 1; i <= clmCnt; i++) {
 					System.out.print(rs.getString(i));
 					System.out.print(" ");
  				}
  				System.out.println();
  			}
  			// */
  
  			// PreparedStatements
 			// PreparedStatement ps = con.prepareStatement("INSERT INTO user
  			// VALUES(?,?,?)");
  			// ps.setInt(1,4711);
  			// ps.setString(2,"foo");
  			// ps.setString(3,"bar");
 			//			
  			// ps.execute();
  
  			// Daten einfügen:
 			// stmt.executeUpdate("INSERT INTO user VALUES(111,'A','B')");
  			rs.moveToInsertRow();
  			rs.updateInt(1, 14);
  			rs.updateString(2, "Tom");
  			rs.updateString(3, "jdar");
  			rs.insertRow();
  
  			// con.commit();
  			// Daten aktualisieren:
 			// stmt.executeUpdate("UPDATE user SET name='c' password='d') WHERE
  			// id = 111;
  			// rs.absolute(-1);
  			// rs.previous();
  			// rs.updateString(2,"Martin3");
  			// rs.updateString(3,"lightbox3");
  			// rs.updateRow();
  
  			// Zweite Zeile löschen
  			// stmt.execute("DELETE FROM user WHERE id = 111");
  			// rs.beforeFirst();
  			// rs.absolute(2);
  			// rs.deleteRow();
  
  			stmt.close();
  			rs.close();
  
  		} finally {
  			if (con != null) {
  				con.close();
  			}
  		}
  
  	}
  }
```
 
  Oracle:

```
/**
   * 
   */
  package de.tutorials.workshop.jdbc;
  
  import java.sql.Connection;
  import java.sql.ResultSet;
  import java.sql.ResultSetMetaData;
  import java.sql.Statement;
  
  import oracle.jdbc.pool.OracleDataSource;
  
  /**
   * @author Tom
   * 
   */
  public class OracleJDBCExample {
  
  	/**
  	 * @param args
  	 */
  	public static void main(String[] args) throws Exception {
  		// Treiber laden:
  		Class.forName("oracle.jdbc.OracleDriver");
  
  		OracleDataSource ods = new OracleDataSource();
  		ods.setUser("scott");
  		ods.setPassword("foobar");
  		ods.setPortNumber(1521);
  		ods.setDriverType("thin");
  		ods.setServerName("localhost");
  		ods.setDatabaseName("orcl");
  
  		Connection con = null;
  
  		try {
  			con = ods.getConnection();
  			Statement stmt = con.createStatement();
 						
  			ResultSet rs = stmt.executeQuery("SELECT * FROM emp");
  
  			ResultSetMetaData rsmd = rs.getMetaData();
  			int clmCnt = rsmd.getColumnCount();
  			
  			while (rs.next()) {
 				for (int i = 1; i <= clmCnt; i++) {
 					System.out.print(rs.getString(i));
 					System.out.print(" ");
  				}
  				System.out.println();
  			}
  
  		} finally {
  
  			if (con != null) {
  				con.close();
  			}
  		}
  	}
  
  }
```
 
  MS SQL Server mit JTDS Treiber:

```
/**
   * 
   */
  package de.tutorials.workshop.jdbc;
  
  import java.sql.Connection;
  import java.sql.ResultSet;
  import java.sql.ResultSetMetaData;
  import java.sql.Statement;
  
  import net.sourceforge.jtds.jdbcx.JtdsDataSource;
  
  /**
   * @author Tom
   * 
   */
  public class MSSQLServerJDBCExample {
  
  	/**
  	 * @param args
  	 */
  	public static void main(String[] args) throws Exception {
  		Class.forName("net.sourceforge.jtds.jdbc.Driver");
  
  		JtdsDataSource jtds = new JtdsDataSource();
  		jtds.setUser("foo");
  		jtds.setPassword("bar");
  		jtds.setPortNumber(1433);
  		jtds.setServerName("localhost");
  		jtds.setDatabaseName("Northwind");
  
  		Connection con = null;
  
  		try {
  			con = jtds.getConnection();
  			Statement stmt = con.createStatement();
  			ResultSet rs = stmt.executeQuery("SELECT * FROM emp");
  
  			ResultSetMetaData rsmd = rs.getMetaData();
  			int clmCnt = rsmd.getColumnCount();
  
  			while (rs.next()) {
 				for (int i = 1; i <= clmCnt; i++) {
 					System.out.print(rs.getString(i));
 					System.out.print(" ");
  				}
  				System.out.println("");
  			}
  
  		} finally {
  
  			if (con != null) {
  				con.close();
  			}
  		}
  	}
  
  }
```
 
  MS Access:

```
/**
   * 
   */
  package de.tutorials.workshop.jdbc;
  
  import java.sql.Connection;
  import java.sql.DriverManager;
  import java.sql.ResultSet;
  import java.sql.ResultSetMetaData;
  import java.sql.Statement;
  
  /**
   * @author Tom
   * 
   */
  public class AccessJdbcOdbcExample {
  
  	/**
  	 * @param args
  	 */
  	public static void main(String[] args) throws Exception {
  		Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
  		String dbpath = "E:/stuff/Nordwind.mdb";
  
  		Connection con = DriverManager
 				.getConnection("jdbc:odbc:DRIVER={Microsoft Access Driver (*.mdb)};DBQ="
 						+ dbpath);
  
  		Statement stmt = con.createStatement();
  
  		ResultSet rs = stmt.executeQuery("SELECT * FROM kunden");
  
  		ResultSetMetaData rsmd = rs.getMetaData();
  		int clmCnt = rsmd.getColumnCount();
  
  		while (rs.next()) {
  			for (int i = 1; i <= clmCnt; i++) {
 				System.out.print(rs.getString(i));
  				System.out.print(" ");
  			}
  			System.out.println();
  		}
  
  		con.close();
  	}
  }
```
 
  MS Excel ( Zuvor in Excelsheet alle Zeilen (inklusive Überschrift) auswählen und markierten Bereich benennen) -> 

```
/**
   * 
   */
  package de.tutorials.workshop.jdbc;
  
  import java.sql.Connection;
  import java.sql.DriverManager;
  import java.sql.ResultSet;
  import java.sql.ResultSetMetaData;
  import java.sql.Statement;
  
  /**
   * @author Tom
   * 
   */
  public class ExcelJdbcOdbcExample {
  
  	/**
  	 * @param args
  	 */
  	public static void main(String[] args) throws Exception {
  		Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
  		String dbpath = "E:/stuff/kunden.xls";
  
  		Connection con = DriverManager
 				.getConnection("jdbc:odbc:DRIVER={Microsoft Excel Driver (*.xls)};DBQ="
 						+ dbpath);
  
  		Statement stmt = con.createStatement();
  
  		ResultSet rs = stmt.executeQuery("SELECT * FROM artikel");
  
  		ResultSetMetaData rsmd = rs.getMetaData();
  		int clmCnt = rsmd.getColumnCount();
  
  		while (rs.next()) {
  			for (int i = 1; i <= clmCnt; i++) {
 				System.out.print(rs.getString(i));
  				System.out.print(" ");
  			}
  			System.out.println();
  		}
  
  		con.close();
  	}
  
  }
```
 
  Gruß Tom


----------



## Thomas Darimont (16. April 2005)

MySQL:

 Automatisch generierte ID Werte ermitteln:

```
/**
  * 
  */
 package de.tutorials.workshop.jdbc;
 
 import java.sql.Connection;
 import java.sql.ResultSet;
 import java.sql.Statement;
 
 import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
 
 /**
  * @author Tom create table bar(id int NOT NULL AUTO_INCREMENT , data
  *         varchar(32), PRIMARY KEY(id));
  */
 public class MySQLGeneratedKeysExample {
 
 	/**
 	 * @param args
 	 */
 	public static void main(String[] args) throws Exception {
  		// Datasource Konfigurieren
 		MysqlDataSource mds = new MysqlDataSource();
 		mds.setUser("root");
 		mds.setPassword("");
 		mds.setPortNumber(3306);
 		mds.setServerName("localhost");
 		mds.setDatabaseName("test");
 
 		Connection con = null;
 
 		try {
 			con = mds.getConnection();
 
 			Statement stmt = con.createStatement();
 			
 			stmt.execute("INSERT INTO bar (data) VALUES ('hallo')");
 			
 			ResultSet rs = stmt.getGeneratedKeys();
 			while (rs.next()) {
 				System.out.println(rs.getInt(1));
 			}
 
 			rs.close();
 			
 			stmt.execute("INSERT INTO bar (data) VALUES ('welt')");
 
 			rs = stmt.getGeneratedKeys();
 			while (rs.next()) {
 				System.out.println(rs.getInt(1));
 			}
 
 			rs.close();
 			} finally {
 			if (con != null) {
 				con.close();
 			}
 		}
 	}
 }
```
 
 Gruß Tom


----------



## Thomas Darimont (16. April 2005)

Initialisierung:


```
/**
 * 
 */
package de.tutorials.workshop.training;

/**
 * @author Tom
 * 
 */
public class ConstructorMagicExample extends Super{

	
	
	{ //initializer 
		System.out.println("A");
	}

	//Default Constructor
	public ConstructorMagicExample() {
		System.out.println("B");
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new ConstructorMagicExample();
	}
	
	static { //static initializer
		System.out.println("C");
	}
}
```


```
/**
 * 
 */
package de.tutorials.workshop.training;

/**
 * @author Tom
 * 
 */
public class Super {

	public Super() {
		System.out.println("super");
	}

}
```

Ausgabe:

C
super
A
B


----------



## schneider_w (16. April 2005)

Ich bin erst gestern auf diese Seite gestossen und muß sagen: Klasse!

Hintergrund: Ich darf sagen, daß ich ziemlich fit bin in UNIX (Shell, Utilities), SQL, C (nicht ganz so in C++) u.ä. (Informatiker, aber vor 10 Jahren leider stehen geblieben, [:-(]).
Java, ODBC und Eclipse kenne ich aber eher nur vom Hörensagen.

Dieses Tutorial hat mein Interesse geweckt und mir Mut gemacht: ich habe viel verstanden und werde noch öfter hier auftauchen. Vielleicht kann ich ja irgendwann auch mal was zurückgeben.

Vielen Dank für dieses schöne Tutorial, gut gemacht, Tom!
Wolf


----------



## dom123 (16. April 2005)

Ja ich fand das Tutorial auch ganz gut.Hat mir auch was gebracht zwar nicht viel aber etwas da ich noch nicht so erfahren in Java bin hab ich ne frage kann mir einer sagen wie oder wo man so das grundprinzip also so standartbefehle herkriegt ?.


----------



## scooty78 (16. April 2005)

War der erste Workshop an dem ich teilgenommen habe und ich muss sagen es war Klasse, da ich mich in den letzten Tagen schon etwas auf dieses Thema vorbereitet hatte habe ich ich in Bezug auf JDBC nicht viel neues gelernt. Aber Dank diesem Tutor bin ich nun von JCreator auf Eclipse umgestiegen...   
Ich hoffe es folgt bald wieder einer Workshop aus dem Bereich Java ;-)


----------



## charlieb (18. April 2005)

Hallo,

war n klasse WS ... danke nochmal  weiter so

leider hat bei mir der IRC gesponnen :-(

Hatte doch noch ne Frage:

Wär SQLJ nicht besser als reines JDBC (sofortige Prüfung in der DB)?

Grüsse

CharlieB


----------



## Thomas Darimont (18. April 2005)

Hallo!

Danke für die Blumen! 
Also was ich von SQLJ so halte läst sich in dem ein oder anderen Thread hier im Forum nachlesen... 
Der Workshop sollte ja nur in das große Gebiet der Datenbankanbindung unter Java mittels JDBC einführen jedoch keinen Anspruch auf Vollständigkeit erheben. Wie gegen Ende des Workshops erwähnt ist Datenbankinteraktion mittels JDBC ziemlich low-level und mittlerweile haben sich da einige clevere Produkte und Technologien auf den Markt breit gemacht mit denen die meisten Tasks viel komfortabler von der Hand gehen, da man sich eben nicht mehr um die Low-Level Programmierung mit der Datenbank kümmern muss. 

Z.bsp. muss man heute mit Hilfe der bekannten Frameworks keine einzige Zeile SQL mehr schreiben um eine Business Objekt persistent zu machen, es zu aktualisieren oder auszulesen. Ich spreche hier beispielsweise von Hibernate oder JDO (Java Data Objects) -Implementierungen wie etwa JPox auch der neue JPA (Java Persistence API) Standard wird solche Konstrukte unterstützen.

Gruß Tom


----------



## Snape (19. April 2005)

dom123 hat gesagt.:
			
		

> Ja ich fand das Tutorial auch ganz gut.Hat mir auch was gebracht zwar nicht viel aber etwas da ich noch nicht so erfahren in Java bin hab ich ne frage kann mir einer sagen wie oder wo man so das grundprinzip also so standartbefehle herkriegt ?.



Die "Standardbefehle" gibt es hier:
http://java.sun.com/j2se/1.5.0/docs/api/

Auch das hier könnte für Dich von Interesse sein:
http://java.sun.com/docs/books/tutorial/index.html


----------



## torsch2711 (19. April 2005)

Hallo Tom,

 leider hab ich den Video-Workshop verpasst, ich hoffe, dass aber bald mal wieder ein Workshop im bereich Java auftaucht.

 Ich denke, du hast das ganze sehr kompetent und gut gemacht. Naja, wenigstens die sample-codes kann ich mir nochmal anschauen. Ich hoffe, das bald die Workshops zum download angeboten werden, damit ich diesen Workshop nochmal erleben darf 


 Grüsse
 Torsten


----------



## ahmed7ben (31. Oktober 2007)

Hallo,
kann mir jemand helfen.Ich will auf eine Exceltabelle zugreifen über Javaprogramm.
Wie geht das ? 
Meine Exceldatei liegt in "H:/test.xls"
Bitte wenn es geht in einem Beispiel erläutern. 
Danke.


----------

