JDBC: Java DataBase Connectivity

Johann Mitlöhner 2010

Wie der Name schon sagt, dient JDBC zur Datenbank-Anbindung von Java Programmen. Um Daten aus einer Tabelle abzufragen, müssen die gleichen Schritte geschehen, die wir vom interaktiven Arbeiten mit der DB kennen:

JSP Vorlage für Select

Mit wenigen Änderungen können wir diese Vorlage für alle Abfragen verwenden:

<%@ page import="java.sql.*" %>
<h1>Artikel</h1>
<%
    String url = "jdbc:mysql://localhost.localdomain/j0012345";
    // Postgres: "jdbc:postgresql:j0012345"
    try { 
      DriverManager.registerDriver(new com.mysql.jdbc.Driver()); 
      // Postgres: org.postgresql.Driver()
      Connection conn = DriverManager.getConnection(url, "j0012345", "...");
      Statement stmt = conn.createStatement ();
      ResultSet rset = 
        stmt.executeQuery("select nr, bez, preis from artikel");
      out.println("<table><tr><td>Nr<td>Bezeichnung<td>Preis");
      while (rset.next()) { 
        out.println("<tr><td>"+rset.getString("nr")
          +"<td>"+rset.getString("bez")
          +"<td align=right>"+rset.getString("preis"));
      }
      out.println("</table>");
    } catch (SQLException e) {
      out.println(e);
    }
%>

Die connection-spezifischen Details werden besser in eine eigene Komponente ausgelagert, zB eine Java Bean.

<jsp:useBean id="db" class="tools.DB" scope="session"/>
<b>Artikel</b>
<%
  try {
    db.connect();
    db.query("select nr, bez, preis from artikel");
    out.println("<table>");
    while (db.next()) {
      out.println("<tr>"
        + "<td>" + db.get("nr")
        + "<td>" + db.get("bez")
        + "<td align=right>" + db.get("preis")
      );
    }
    out.println("</table>");
  } catch (Exception e) {
    out.println(e);
  }
%>

JSP Vorlage für Insert

Die Daten werden in einem HTML-Formular eingegeben, wo als Option action der Name der Insert JSP Seite angegeben wird, z.B.

<form action=insertkunde.jsp>
<input type=text name=nr> <br>
<input type=text name=name> <br>
<input type=text name=adresse> <br>
<input type=submit value=OK>
</form>

Beim Insert müssen wir executeUpdate() statt executeQuery() verwenden. Den SQL-String merken wir uns in der Variable sql für eine eventuelle Fehlermeldung.

<%@ page import="java.sql.*" %>
<%
    String url = "jdbc:mysql://localhost.localdomain/j0012345";
    try {
      String nr = request.getParameter("nr");
      String name = request.getParameter("name");
      String adresse = request.getParameter("adresse");
      DriverManager.registerDriver(new com.mysql.jdbc.Driver()); 
      Connection conn = DriverManager.getConnection(url, "j0012345", "...");
      Statement stmt = conn.createStatement ();
      String sql = "insert into kunde (nr, name, adresse)"
	+ " values(" + nr + ", '" + name + "', '" + adresse + "')";
      try {
	stmt.executeUpdate(sql);
	out.println("<br> Erfassung erfolgreich.");
      } catch (Exception e) {
	out.println("<br> Fehler bei Erfassung: " + sql + "<br>" + e);
      }
    } catch (Exception e) {
      out.println(e);
    }
%>

Beachten Sie

DB Bean Variante 2

DB.java in ~/www/WEB-INF/classes/tools

package tools;

import java.sql.*;

public class DB {
  String url = "jdbc:mysql://localhost.localdomain/j8325200";

  public Statement getstmt() {
    Statement st = null;
    try {
      DriverManager.registerDriver(new com.mysql.jdbc.Driver());
      Connection conn = DriverManager.getConnection(url, "j8325200", "password");
      st = conn.createStatement ();
    } catch (Exception e) { }
    return st;
  }
}

javac -cp /usr/share/java/mysql-connector-java.jar DB.java

.jsp file:

<%@ page import="java.sql.*" %>
<jsp:useBean id="db" class="tools.DB" scope="page" />
<% 
  Statement st = db.getstmt();
  ResultSet rs = st.executeQuery("select nr, bez from artikel");
  out.println("<table>");
  while (rs.next()) {
    out.println("<tr><td>" + rs.getString("nr") + "<td>" + rs.getString("bez"));
  }
  out.println("</table>");
%>