preparedStatement (MySQL - JDBC)

Status
Nicht offen für weitere Antworten.

wirstu23

Neues Mitglied
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.

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());
        }
    }
}
Über nen kleinen Tipp würd ich mich freuen. :)

Hier mal ein Ausschnitt aus dem Schema

23447494.jpg
 
Zuletzt bearbeitet:
S

SlaterB

Gast
ich weiß nicht wirklich weiter, aber zwei generelle Tipps:
- probiere das ganze erstmal separat mit einer ganz neuen einfachen Tabelle test mit nur einer int-Spalte
- frage zunächst ohne where alle Datensätze ab, schon gar nicht joins in der Anfrage usw

edit: ach halt, alles klar,
du kannst in where nicht tabellenname.attribut schreiben, das ist doch kein SQL,

schreibe
FROM accounts a
where a.id = 1

und nun kann ich auch erwähnen:
wenn du einen join über accounts und history machst, dann brauchst du besser eine join-Bedingung, etwa
where h.id = a.id
 
Zuletzt bearbeitet von einem Moderator:
V

Vayu

Gast
ich würde mal probieren ein Leerzeichen mehr zu verwenden :D

[HIGHLIGHT="Java"]PreparedStatement stt = conn.prepareStatement(
"select accounts.accid, history.delta, history.cmmnt<LEERZEICHEN>" +
"from history, accounts " +
"where accounts.accid=?");
[/HIGHLIGHT]
 

wirstu23

Neues Mitglied
Ok ... mir is auch aufgefallen, dass die Anfrage so nicht ganz richtig gewesen wäre.

Code:
            PreparedStatement stt = conn.prepareStatement(
            "select accid, delta, cmmnt" +
            "from history" +
            "where accid=? ");
Der Fehler ist danach wieder aufgetreten ... habe dann mal verschiedene andere Anfragen ausprobiert und bin auf den Fehler gestoßen: JDBC mag die Verknüpfung der Strings nicht.

Code:
            PreparedStatement stt = conn.prepareStatement(
            "select accid, delta, cmmnt from history where accid=?");
Danke für die Hilfe :>

[EDIT] Ok ... dann warn die Leerzeichen ^^
 
M

maki

Gast
>> JDBC mag die Verknüpfung der Strings nicht.

Falsch ;)

Der fehler ist jetzt offentsichtlich:
Code:
"select accid, delta, cmmnt" +
            "from history" +
            "where accid=? "
Das ergibt einen String mit folgendem Inhalt:
Code:
select accid, delta, cmmntfrom historywhere accid=? "
Merkst du etwas? ;)

Nachtrag: Hast du ja selbst schon rausgefunden :)
 
V

Vayu

Gast
das war das erste wo ich nachgeschaut hab :p weil da fall ich auch immer wieder mit auf die Nase ^^
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Kirby.exe PreparedStatement wird nicht ausgeführt Datenbankprogrammierung 5
V SQLite NullPointerException in preparedStatement.close(); Datenbankprogrammierung 8
Neumi5694 SQL-Statement Preparedstatement - try resource vs. Garbage Collector Datenbankprogrammierung 5
S JDBC PreparedStatement durchiterieren Datenbankprogrammierung 6
S CSV Datein in DB übernehmen:PreparedStatement bzw executeBatch() zu langsam Datenbankprogrammierung 11
P MySQL PreparedStatement vs. StoredProcedure vs. executeBatch Datenbankprogrammierung 1
P PreparedStatement IN-Funktion Datenbankprogrammierung 8
R PreparedStatement ohne Parameter? Datenbankprogrammierung 4
turmaline Oracle [PreparedStatement] Klammer fehlt Datenbankprogrammierung 9
C PreparedStatement und null Datenbankprogrammierung 13
J Problem bei Boolean in PreparedStatement Datenbankprogrammierung 5
M Variable in SQL SELECT * FROM ... WHERE mithilfe von PreparedStatement benutzen? Datenbankprogrammierung 28
D MySQL PreparedStatement mit c3p0 schlägt fehl. Warum? Datenbankprogrammierung 3
S Oracle Problem mit PreparedStatement.setString(1,"str") Datenbankprogrammierung 10
M MySQL preparedStatement und Anführungszeichen Datenbankprogrammierung 6
L MySQL Probleme mit PreparedStatement für SQL-Abfrage in Java Datenbankprogrammierung 2
G PreparedStatement und Transaktionen Datenbankprogrammierung 2
N Leeres Blob in ein PreparedStatement eintragen Datenbankprogrammierung 2
P PreparedStatement batch und getGeneratedKeys Datenbankprogrammierung 7
T MySQL PreparedStatement mit INSERTs langsam, Batch-Statement auch Datenbankprogrammierung 4
B H2 PreparedStatement SELECT * FROM ? Datenbankprogrammierung 4
M FindBugs und PreparedStatement aus einer Datei lesen Datenbankprogrammierung 11
Guybrush Threepwood PreparedStatement: execute() oder executeUpdate() Datenbankprogrammierung 3
R PreparedStatement mit verschiedenen Datenbanken Datenbankprogrammierung 2
R Frage zu PreparedStatement/ResultSet Datenbankprogrammierung 16
R Zugriff auf SQL im PreparedStatement Datenbankprogrammierung 4
Landei PreparedStatement Parameter mehrfach verwenden Datenbankprogrammierung 18
S Create Table mit PreparedStatement Datenbankprogrammierung 2
S Select mit PreparedStatement Datenbankprogrammierung 2
S PreparedStatement setArray(int i, java.sql.Array) Datenbankprogrammierung 17
M Preparedstatement SQL-string auslesen Datenbankprogrammierung 13
T PreparedStatement anzeigen Datenbankprogrammierung 10
A PreparedStatement im Servlet - Referenz speichern Datenbankprogrammierung 3
P PreparedStatement - Angabe des PK Datenbankprogrammierung 4
J Fehler beim PreparedStatement Datenbankprogrammierung 2
B PreparedStatement - anzahl ParameterValues Datenbankprogrammierung 6
J PreparedStatement Datenbankprogrammierung 5
C PreparedStatement Datenbankprogrammierung 2
R DB2 PreparedStatement Batches ungültige Reihenfolge Datenbankprogrammierung 4
Juelin Java und MySQL MariaDB - WHERE-Klausel Datenbankprogrammierung 17
W MySQL-Connector funktioniert nicht über WLAN -> MacOS Datenbankprogrammierung 10
Juelin MySQL Datenbankmit glassfish und Netbeans Datenbankprogrammierung 18
Auf MySql Datenbank zugreifen funktioniert nicht Datenbankprogrammierung 8
TheSkyRider MySQL Datenbankzuordnung in Verbindung mit Java Datenbankprogrammierung 7
Warum funktioniert MySQL nicht Datenbankprogrammierung 8
M MySQL Datenbank in Array Datenbankprogrammierung 2
P MySQL- Neues Passwort Datenbankprogrammierung 1
btwX28 mysql abfrage über phpmyadmin Datenbankprogrammierung 8
sserio SQL oder MySQL Datenbankprogrammierung 44
OnDemand Mysql Query Builder Datenbankprogrammierung 1
Z MySQL "Too many connections" auch nach schliessen der Connections. Datenbankprogrammierung 10
yakazuqi MySQL MySQL Connection reset Datenbankprogrammierung 7
OnDemand MySql Foreign Key nötig oder unnötig Datenbankprogrammierung 3
M Mysql Views und Hibernate Caching Datenbankprogrammierung 4
W MYSQL Datenbank Login Android Datenbankprogrammierung 3
OnDemand MySQL und mongoDB wann macht was Sinn? Datenbankprogrammierung 11
bueseb84 Spring Boot : Update Mysql Datenbank Datenbankprogrammierung 1
Avalon Attribute werden mit Unterstrich in eine MySQL Datenbank eingetragen Datenbankprogrammierung 10
D MYSQL goorm IDE - Wie speichern? Datenbankprogrammierung 0
OnDemand Mysql UPDATE if condition Datenbankprogrammierung 14
D MySQL Geburtsdatum per KW abfragen Datenbankprogrammierung 1
C Java MySQL check if value exists in database Datenbankprogrammierung 2
H Fehler bei getConnection zu MySQL Datenbank Datenbankprogrammierung 18
J MySQL - Primary Key Date,Time vs ID Datenbankprogrammierung 16
ruutaiokwu MySQL: Messwerte, welche stagnieren interpolieren? Datenbankprogrammierung 2
S Datenbank MySQL und Java Datenbankprogrammierung 8
Thallius MySQL JDBC auf Linux Server zu mySQL DB auf anderem Linux Server wirft Access denied Datenbankprogrammierung 5
P Adressadministration mit Java und mySQL Datenbankprogrammierung 14
D MySQL Abfrage Datenbankprogrammierung 5
D MySQL Abfrage sortieren Datenbankprogrammierung 4
platofan23 MySQL Java Programm findet Treiber für mySQL auf Debian-Server nicht? Datenbankprogrammierung 11
J MySQL MySQL Risiken bei Stromausfall minimieren Datenbankprogrammierung 9
D MySQL Abfrage SUM datediff Datenbankprogrammierung 3
H MySQL MySQL - Keine Verbindung zur Datenbank?! Datenbankprogrammierung 4
G MySQL Problem mit MySQL verbindung Datenbankprogrammierung 8
X MySQL Java hat keinen Zugriff auf MySQL Datenbankprogrammierung 9
Z [JDBC][MYSQL] Access denied Datenbankprogrammierung 7
D MySQL Connection richtig herstellen. Wie ? Datenbankprogrammierung 7
D Multiple Connection mit MySQL Datenbankprogrammierung 4
D MySQL Eibinden des "mysql-connector" in eine fertige Jar Datenbankprogrammierung 3
L MySQL Android zu externer MySQL Datenbank verbinden Datenbankprogrammierung 5
P Daten in eine mySQL Datenbank einfügen Datenbankprogrammierung 4
D MySQL Zeilen kumulieren Datenbankprogrammierung 8
D MySQL Abfrage mit kumulierten Werten Datenbankprogrammierung 16
K Servlet-MySQL DB Datenbankprogrammierung 2
X MySQL Json String in MySQL einfügen. Datenbankprogrammierung 20
OnDemand Update auf Mysql läuft nicht durch Datenbankprogrammierung 30
K Java Object mit Hibernate in MySQL abspeichern Datenbankprogrammierung 1
D Datumsformat aus MySQL ändern Datenbankprogrammierung 15
G MySQL Java Problem: Nullpointer Exception obwohl Daten vorhanden sind? Datenbankprogrammierung 2
K MySQL LAN-MySQL Server mit XAMPP Datenbankprogrammierung 2
R ERModel der Datebanken (ORACLE,MySQL,MS-SQL usw) Datenbankprogrammierung 4
X MySQL In MySQL Funktionen erstellen, wenn Zelle leer dann andere Zelle ändern? Datenbankprogrammierung 9
K Anfängerfrage CSV in MySQL Datenbankprogrammierung 41
I MySQL Wert nachträglich bearbeiten Datenbankprogrammierung 1
N MySQL Datenbank lokal Datenbankprogrammierung 3
B MySQL: Port ändern über GUI? Wo und wie Port ändern? Datenbankprogrammierung 0
B MySQL installieren - silent / User anlegen Datenbankprogrammierung 3
X MySQL Verbindungdsaufbau MySql auf Ubuntu-Server Datenbankprogrammierung 10
F MySQL Wie kann ich in Java Datensätze aus einer MySQL Datenbank gezielt in einzelne Arrays schreiben? Datenbankprogrammierung 9

Ähnliche Java Themen

Neue Themen


Oben