Guten Morgen!
Ich habe da einige Probleme mit der folgenden Aufgabe:
"Schreiben Sie zur Benchmark-Datenbank aus der Aufgabe 2) eine ausführlich
kommentierte Prozedur oder Methode (bspw. in C, C++ oder Java), die zu einer
vorgegebenen Kontonummer als Eingabeparameter alle Buchungen zu diesem Konto
ausdruckt. In der geforderten Übersicht interessieren die Kontonummer (ACCID), der Name des Kontobesitzers (NAME), der Buchungsbetrag (DELTA) und der
Buchungskommentar (CMMNT).
Der Verbindungsaufbau zur Datenbank sollte außerhalb der Prozedur oder Methode
erfolgen (aber im Rahmenprogramm mit angegeben werden!), sodass die verfügbare Verbindung innerhalb der Prozedur oder Methode mehrfach verwendet werden kann. Erläutern Sie Ihr Programm in wenigen Sätzen!"
Im Prinzip ist das Ganze auch kein Problem. Bis ich zu den Preparedstatements komme. Ich bekomme, egal was ich mache, die Fehlermeldung:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'where accounts.accid=1' at line 1
(Für die accid habe ich bei dem Versuch 1 angegeben. Der SQL-Befehl funktioniert im DBMS und Werte werden auch gefunden. Von daher kann es daran nicht liegen)
Weiss echt nicht mehr was ich machen soll, weil ich es wirklich exakt so gemacht habe wie es bei mir im Skript steht.
Der Programmteil in dem die Relationen erstellt werden ist ok. Die Relation wird mit nem anderen Programm gefüllt, aber da läuft alles einwandtfrei. Deshalb habe ich das erstmal weg gelassen.
Das Preparedstatement ist in der main. Hoffe es ist von der Übersichtlichkeit noch ertragbar.
Über nen kleinen Tipp würd ich mich freuen. 
Hier mal ein Ausschnitt aus dem Schema
Ich habe da einige Probleme mit der folgenden Aufgabe:
"Schreiben Sie zur Benchmark-Datenbank aus der Aufgabe 2) eine ausführlich
kommentierte Prozedur oder Methode (bspw. in C, C++ oder Java), die zu einer
vorgegebenen Kontonummer als Eingabeparameter alle Buchungen zu diesem Konto
ausdruckt. In der geforderten Übersicht interessieren die Kontonummer (ACCID), der Name des Kontobesitzers (NAME), der Buchungsbetrag (DELTA) und der
Buchungskommentar (CMMNT).
Der Verbindungsaufbau zur Datenbank sollte außerhalb der Prozedur oder Methode
erfolgen (aber im Rahmenprogramm mit angegeben werden!), sodass die verfügbare Verbindung innerhalb der Prozedur oder Methode mehrfach verwendet werden kann. Erläutern Sie Ihr Programm in wenigen Sätzen!"
Im Prinzip ist das Ganze auch kein Problem. Bis ich zu den Preparedstatements komme. Ich bekomme, egal was ich mache, die Fehlermeldung:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'where accounts.accid=1' at line 1
(Für die accid habe ich bei dem Versuch 1 angegeben. Der SQL-Befehl funktioniert im DBMS und Werte werden auch gefunden. Von daher kann es daran nicht liegen)
Weiss echt nicht mehr was ich machen soll, weil ich es wirklich exakt so gemacht habe wie es bei mir im Skript steht.
Der Programmteil in dem die Relationen erstellt werden ist ok. Die Relation wird mit nem anderen Programm gefüllt, aber da läuft alles einwandtfrei. Deshalb habe ich das erstmal weg gelassen.
Das Preparedstatement ist in der main. Hoffe es ist von der Übersichtlichkeit noch ertragbar.
Code:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.sql.*;
public class aufgabe3 {
static Connection conn;
static boolean verbunden = false;
static boolean created = false;
static int accid;
static boolean connect()
{
System.out.println("Treiber werden geladen ...");
try
{
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e){
System.out.println(e.getMessage());
}
System.out.println("Treiber geladen!");
try
{
conn = DriverManager.getConnection("jdbc:mysql://localhost/pascal", "root", "fenster");
}catch (SQLException e){
System.out.println(e.getMessage());
}
return verbunden = true;
}
static boolean createRelation()
{
try
{
System.out.println("Relationen werden angelegt ...");
Statement stmt = conn.createStatement();
stmt.execute("drop table if exists history,accounts,tellers,branches");
stmt.executeUpdate("create table branches"
+ "( branchid int not null, "
+ "branchname char(20) not null, "
+ "balance int not null, " + "address char(72) not null, "
+ "primary key (branchid))");
stmt.executeUpdate("create table accounts( "
+ "accid int not null,"
+ "name char(20) not null,"
+ "balance int not null,"
+ "branchid int not null,"
+ "address char(68) not null,"
+ "primary key (accid),"
+ "foreign key (branchid) references branches(branchid) );");
// erstellt tellers
stmt.executeUpdate("create table tellers"
+ "(tellerid int not null,"
+ "tellername char(20) not null,"
+ "balance int not null,branchid int not null,"
+ "address char(68) not null,"
+ "primary key (tellerid),"
+ "foreign key (branchid) references branches(branchid) );");
// erstellt history
stmt.executeUpdate("create table history"
+ "( accid int not null,tellerid int not null,"
+ "delta int not null," + "branchid int not null,"
+ "accbalance int not null," + "cmmnt char(30) not null,"
+ "foreign key (accid) references accounts(accid),"
+ "foreign key (tellerid) references tellers(tellerid),"
+ "foreign key (branchid)references branches(branchid) );");
System.out.println("Relationen sind angelegt!");
conn.close();
}catch(SQLException e){
}
return created = true;
}
public static void main (String args[])
throws IOException
{
BufferedReader din = new BufferedReader(
new InputStreamReader(System.in));
System.out.println("Möchten Sie die Relationen neu anlegen?");
int menu = 0;
do
{
menu = Integer.parseInt(din.readLine());
}while(menu<1 | menu>2);
if(menu == 1)
{
connect();
createRelation();
}
System.out.println("Bitte Kundennummer angeben: ");
accid = Integer.parseInt(din.readLine());
connect();
try{
conn.setAutoCommit(false);
PreparedStatement stt = conn.prepareStatement(
"select accounts.accid, history.delta, history.cmmnt" +
"from history, accounts " +
"where accounts.accid=?");
stt.setInt(1,accid);
ResultSet rs = stt.executeQuery();
while (rs.next())
{
System.out.println(rs.getInt("accid") + "\t" +
rs.getInt("delta") + "\t\t" + rs.getString("cmmnt"));
}
rs.close();
conn.commit();
conn.close();
System.out.println("Disconnected!");
}catch(SQLException f)
{
System.out.println(f.getMessage());
}
}
}
Hier mal ein Ausschnitt aus dem Schema

Zuletzt bearbeitet: