SQL ohne Datenrückgabe - Beuth Hochschule für Technik Berlin

Werbung
SQL ohne Datenrückgabe
4
SQL ohne Datenrückgabe (insert, update, delete u.a.)
4.1
INSERT mit EXECUTE
Die meisten anderen SQL-Befehle liefern keine Ergebnismenge zurück. Sie werden nur zum Datenbanksystem
geschickt und dort ausgeführt, z.B. insert, update, delete. Aber auch create table, drop table, create view, drop view
u.ä. Sie werden viel seltener benutzt (in 20% der Fälle?).
import java.sql.*;
public class insert1
{ public static void main(String[] args) throws Exception
{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection c = DriverManager.getConnection("jdbc:odbc:accessdb","","");
String sql = "INSERT INTO person VALUES ('x', 'x')";
System.out.println(sql);
Statement s = c.createStatement();
s.execute(sql);
c.close();
}
}
TFH Berlin/Steyer
SQL ohne Datenrückgabe
4.2
PREPARE
Beim Erfassen von Daten müssen INSERT-Befehle ausgeführt werden, die sich oft nur in den Werten
unterscheiden. Ein solcher INSERT-Befehl wird vom Datenbanksystem nur das erste Mal geparst und danach
lediglich mit wechselnden Werten gefüllt. Das geschieht mit dem Befehlstyp PreparedStatement. Dieses wird vom
Programmierer mit dem konstanten Teil gefüllt, mit Fragezeichen an den Stellen der Werte. Dieses
PreparedStatement wird an das Datenbanksystem geschickt und ein einziges Mal geparst. Später in der
Ausführungsschleife werden nur noch Werte auf die Plätze der Fragezeichen gesetzt.
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import java.util.*;
public class insert2 extends Frame {
// GUI-Variable
Label status = new Label("bereit ...", Label.LEFT);
Panel ein = new Panel(new GridLayout(0,2));
TextField vor = new TextField();
TextField nac = new TextField();
Button bein;
// JDBC-Variable
String drv = "sun.jdbc.odbc.JdbcOdbcDriver";
String url = "jdbc:odbc:accessdb";
int code;
Connection c;
PreparedStatement ps;
String ins = "INSERT INTO person VALUES (?, ?)";
public insert2() {
// Fenster
add("Center", ein);
ein.add(new Label("Vorname"));
ein.add(vor);
ein.add(new Label("Nachname"));
ein.add(nac);
ein.add(bein = new Button("Einfügen"));
add("South", status);
setSize(400,250);
setVisible(true);
try {
Class.forName(drv);
c = DriverManager.getConnection(url, "", "");
ps = c.prepareStatement(ins);
}
catch (Exception ex) {ex.printStackTrace();}
TFH Berlin/Steyer
SQL ohne Datenrückgabe
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0); }} );
bein.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
rein(ins);}});
}
private void rein(String i) {
try {
ps.setString(1,vor.getText());
ps.setString(2,nac.getText());
// status.setText("Query: " + q);
ps.execute();
}
catch (Exception ex) {ex.printStackTrace();}
}
public static void main(String[] args) {
new insert2();
}
}
1. Benutzung:
SQL-Befehl vollständig ausführen
PARSE-Teil
EXECUTE-Teil
Daten
Weitere Benutzungen:
in SQL-Befehl nur noch Werte einsetzen, ausführen, nicht parsen
PARSE-Teil
EXECUTE-Teil
Daten
Diese Technik kann auch dazu benutzt werden, grosse Werte, z.B.Bilder, in Datenbankfelder einzutragen
TFH Berlin/Steyer
Herunterladen