Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Antwort
 
Themen-Optionen
Alt 15.05.2005, 15:08   Nach oben    #1
pro_evo
Gast
 
Beiträge: n/a
Standard ist hieran was falsch ? UPDATE Anweisung

hi all,

in die neu angelegte Spalte werden einfach keine Werte geschrieben.
Sie ist in Acces einfach leer
Es kommt aber auch keine Fehlermeldung

Fällt jemandem was auf ?

Code:
try {
			stmt.executeUpdate("ALTER TABLE Mannschaft add AnzAufstellungen INTEGER"); 
			 stmt.executeUpdate("UPDATE Mannschaft SET AnzAufstellungen=10"); // geht ned !!
		}
		catch (SQLException sqe) {System.err.println(sqe); }]
und noch 2 Kleinigkeiten in dem Befehl die stören :

- statt INTEGER NUMBER(4) geht nicht
- als Spaltenname 'Anz Aufstellungen' geht (ohne Hichkommas gehts ned), aber in der Acces DB Ansicht heisst die Spalte dann " 'Anz Aufstellungen' " also mit Hochkommas

danke im Voraus
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 15.05.2005, 17:24   Nach oben    #2
sparrow
Sesselkleber
 
Benutzerbild von sparrow
 
Registriert seit: 17.01.2005
Beiträge: 567
Standard

Erstmal zu deinen beiden Störungen.
Mit Leerzeichen im Spaltennamen wär ich immer Vorsichtig und würde es immer Vermeiden. Im Zweifelsfall ein _ statt einem Leerzeichen.

Die Stellenanzahl von INTEGER-Spalten ist in den meisten Datenbanken nicht veränderbar.
Liegt ganz einfach daran das INTEGER an sich ja bereits die Beschreibung einer Spalte ist, deren Inhalt (stellenmäßig) meistens ja klar ist, INTEGER darf halt so und so viel Stellen haben, also ist die Stellenanzahl nicht variabel.

Kleine Zwischenfrage, warum nutzt du als Datenbank nicht HSQLDB, wo du doch eh mit Java programmierst?
HSQLDB = voll in Java programmierte Datenbankengine.
http://hsqldb.sourceforge.net

Was deine UPDATE-Anweisung angeht, versuch mal verschiedene Schreibweisen (ich habe ehrlichgesagt noch nie versucht eine Access-Daenbank zu verwenden).

stmt.executeUpdate("UPDATE Mannschaft SET AnzAufstellungen='10'");

oder kommt vielleicht sogar eine Fehlermeldung dabei raus, oder wird nur nichts ausgeführt?

Ist die Spalte vielleicht schon angelegt?
Dann würde er mit dem 1. Befehl (dem ALTER TABLE .. ADD) nämlich bereits einen Fehler auslösen und den TRY-Block nicht weiter ausführen.


Gruß
Sparrow
sparrow ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 15.05.2005, 17:44   Nach oben    #3
pro_evo
Gast
 
Beiträge: n/a
Standard

jo stimmt mit Leerzeilen hast du schon recht ,lieber weglassen

zum INTEGER ... also ich moechte den Veriablentyp der Spalte ja gar nicht als INTEGER haben sondern als NUMBER ...
Zitat:
In den Befehlen create table und alter table wird bei der Definition jeder Spalte angegeben, welches Datenformat sie unterstützen soll.
Die Wichtigsten dieser standardisierter Datentypen sind:

integer
Ganze Zahl (positiv oder negativ)

number (n)
Ganze Zahl (positiv oder negativ) mit maximal n Stellen
usw. usw.
und Number lässt er gar ned zu es kommt:
Zitat:
java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Syntaxfehler in ALTER TABLE-Anweisung.
ok das is ja ned das Hauptproblem, zu der UPDATE Anweisung ... hab schon X Schreibweisen probiert , geht leider ned, auch ned mit deiner vorgeschlagenen.
Es kommt wie gesagt KEIN Fehler, aber die Zeile wird definitiv erreicht, denn wenn ich nen Fehler einbaue , z.B.
Code:
stmt.executeUpdate("UPDATE Mannschaft SET AnzAufstellungen='aaa'");
Dann kommt:
Zitat:
java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Datentypen in Kriterienausdruck unverträglich.
Ist mir echt ein Raetsel was da los ist ..

hm jo ist halt die Aufgabe das mit einer Access DB zu machen , geht ja eigentlich auch fix und man kanns sichs gleich in Access anschauen was man verbrochen hat .. etc ...
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 15.05.2005, 18:02   Nach oben    #4
sparrow
Sesselkleber
 
Benutzerbild von sparrow
 
Registriert seit: 17.01.2005
Beiträge: 567
Standard

Na, wenn du Access eh installiert hast, mach doch mal folgendes:

Datenbank in Access öffnen.
Menüpunkt: Abfragen
Neue Abfrage

Und dann klickst du dir deine Abfrage zusammen.
Rechtsklick ins obere Feld, Tabelle hinzufügen, Mannschaft wählen.
Rechtsklick ins untere Feld, Abfragetyp wählen -> Aktualisierungsabfrage

AnzAufstellung von dem Fensterchen oben nach unten in die Tabelle ziehen.
Bei Aktualsierung (Update?) eintragen: 10

und dann oben links auf SQL-Ansicht.
Da steht dann wie Access es für sich selbst zusammenbauen würde, und dann weißt du ob dein Syntax stimmt.

Ich hoffe das mit dem Klicken ist alles richtig erklärt, ich hab schon eine Weile nicht mehr mit Access gearbeitet.

Wäre super wenn du sagst obs klappt.

Gruß

Sparrow
sparrow ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 15.05.2005, 18:49   Nach oben    #5
pro_evo
Gast
 
Beiträge: n/a
Standard

hi,

hab alles so gemacht, Access schustert sich das hier zusammen :
UPDATE Mannschaft SET Mannschaft.AnzAufstellungen = 10;

hab das nun mit
stmt.executeUpdate("UPDATE Mannschaft SET Mannschaft.AnzAufstellungen = 10;");

benutzt, leider ohne Erfolg. (Keine Fehlermeldung .. nix)

Wenn ich die In Access erstellte Abfrage ausführe, werden die Inhalte übrigens geschrieben ...

schade
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 15.05.2005, 23:23   Nach oben    #6
sparrow
Sesselkleber
 
Benutzerbild von sparrow
 
Registriert seit: 17.01.2005
Beiträge: 567
Standard

Also das einzige was ich mir noch vorstellen kann was funktionieren könnte:

Code:
stmt.executeUpdate("UPDATE Mannschaft SET Mannschaft.AnzAufstellungen = 10 WHERE Mannschaft.AnzAufstellung LIKE '%';");
sparrow ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 16.05.2005, 01:13   Nach oben    #7
pro_evo
Gast
 
Beiträge: n/a
Standard

hmm da kommt leider ne Fehlermeldung :
java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] 1 Parameter wurden erwartet, aber es wurden zu wenig Parameter übergeben.

Hab aber auch schonmal ne WHERE Bedingung eingebaut z.B. Nr=1 aber dann ist die betreffende Zeile trotzdem leer ... bin mit meim Latein echt am ende ...

----------------------------------------------------
vielleicht sollte ich mal den ganzen Code posten ?
(hmm wieso is code in [ java ] so farblos ? )

PHP-Code:
import java.sql.*;
import java.util.*;



public class 
blatt04 {
    
    static private 
Connection con null;
    static private 
Statement stmt null;
    
    static public 
void verbinde () {    
        try {
            Class.
forName("sun.jdbc.odbc.JdbcOdbcDriver");  // Treiber laden (hier Access)
            
            //    Verb. zur eigentlichen  DB
            
con DriverManager.getConnection"jdbc:odbc:;DRIVER=Microsoft Access Driver (*.mdb);DBQ=vereins_db"); 
            
stmt con.createStatement(); 
        }
        catch (
Exception e) { System.err.println (e); }
    }

    static public 
void erstelleTabelle ()  { 
        try {
          
stmt.execute ("DROP TABLE Mannschaft");
          
System.out.println("Tabelle Erfolgreich gelöscht");
        }
        catch (
Exception e) {System.err.println (e);}
        
        try {
          
stmt.execute ("CREATE TABLE Mannschaft (Nr INTEGER PRIMARY KEY, Name VARCHAR (50), Vorname VARCHAR (50), Geburtsdatum DATE)");
          
          
System.out.println("Tabelle Erfolgreich erstellt");
        } catch (
Exception e) {System.err.println (e);}
      }
    
//     // Eintragen von Datensätzen in die Tabelle 
      
static public void addSpieler (int nrString nameString vornameString datum/*throws SQLException*/ {
          
java.sql.Date yyyymmdd;
          try {    
            
StringTokenizer st = new StringTokenizer (datum,".");
            
int tag Integer.parseInt(st.nextToken());
            
int monat Integer.parseInt(st.nextToken());
            
int jahr Integer.parseInt(st.nextToken());
        
            
yyyymmdd java.sql.Date.valueOf(""+jahr+"-"+monat+"-"+tag);
            
            
stmt.executeUpdate ("INSERT INTO Mannschaft VALUES ('"+nr+"','"+name+"','"+vorname+"','"+yyyymmdd+"');");        
          }
          catch (
Exception e){System.err.println(e) ; }
      }
      
      
// Anzeige von Datensätzen
      
static public void anzeigen (ResultSet rsthrows SQLException {
        while (
rs.next ()) {
          
int    Nr   rs.getInt ("Nr");
          
String Name rs.getString ("Name");
          
String Vorname rs.getString ("Vorname");
          
java.sql.Date geb rs.getDate ("Geburtsdatum");
          
System.out.println ("Nr : " Nr " Name : " Name " Vorname : " Vorname " GebDatum : " geb);
        }
      }
      
      static 
int alter_ausrechnen (java.util.Date geb) {
        
java.util.Date heute = new java.util.Date();
        
//long alter_ms = heute.getTime()-geb.getTime(); //alter in ms was ein Dreck (Schaltjahre)
        
int jahre heute.getYear()-geb.getYear();
        if ( (
heute.getMonth() < geb.getMonth() ) || ( (heute.getMonth() == geb.getMonth()) && heute.getDay() < geb.getDay()) ) 
                
jahre jahre-1;
        
          return 
jahre;
      }
      
      
    
    
    public static 
void main(String[] args) {
        
verbinde();
        
erstelleTabelle();
        
FCBayern myFCBayern = new FCBayern ();
        
Fussballer[] myFCBayern.getMannschaft();
        for (
int i 0m.lengthi++) {
            
addSpieler (m[i].getNummer(), m[i].getName(), m[i].getVorname(), m[i].getGeburtsdatum());
        }
        try {
            
ResultSet my_rs stmt.executeQuery("SELECT * FROM Mannschaft;") ;
            
anzeigen(my_rs);
        }
        catch (
SQLException sqe) {System.err.println(sqe); }
        
        
// b) Abfragen : 
        
System.out.println("b) Abfragen : ");
        try {
            
ResultSet my_rs stmt.executeQuery("SELECT * FROM Mannschaft WHERE Nr=25;") ;
            
anzeigen(my_rs);
        }
        catch (
SQLException sqe) {System.err.println(sqe); }
        try {
            
ResultSet my_rs stmt.executeQuery("SELECT Geburtsdatum FROM Mannschaft WHERE Nr=10;") ;
            
my_rs.next ();
            
java.sql.Date geb my_rs.getDate ("Geburtsdatum"); // hol doch extra nur GebDatum ??!!
            
int alter alter_ausrechnen(geb);
            
System.out.println("Gesuchter Spieler ist "+alter+" Jahre alt.");
            
        }
        catch (
SQLException sqe) {System.err.println(sqe); }
        
        
//  c) Änderungen : 
        
try {
            
stmt.executeUpdate("ALTER TABLE Mannschaft add AnzAufstellungen INTEGER;"); 
            
// Maaaaannn!! Will keine Hochkommas und NUMBER(4) geht auch ned !
            //stmt.executeUpdate("UPDATE Mannschaft SET AnzAufstellungen=10;"); // geht ned !!
            
stmt.executeUpdate("UPDATE Mannschaft SET Mannschaft.AnzAufstellungen = 10;");
            
//stmt.executeUpdate("UPDATE Mannschaft SET Mannschaft.AnzAufstellungen = 10 WHERE Mannschaft.AnzAufstellung LIKE '%';");
        
}
        catch (
SQLException sqe) {System.err.println(sqe); }
    }

die aufgabe lautet :
Zitat:
Geben Sie Java-Programme mit folgenden Aufgaben an:
a) Einrichten
1. Anlegen einer Tabelle „Mannschaft“ mit ganzer Zahl Nummer als Schlüssel, Name als Text, Vorname als
String und Geburtsdatum als Datum.
2. Eintragen aller Spieler der Mannschaft mannschaftSaison0304.
3. Anzeige der eingetragenen Spieler
Hinweis: Die Klasse java.sql.Date dient der Darstellung von Datumsangaben in Java. Besonders nützlich könnte
die statische Methode valueOf werden, die eine Zeichenkette im Format "yyyy-mm-dd" in eine Datumsangabe
konvertiert.
b) Abfragen
1. Welcher Spieler hat die Nummer 25?
2. Wie alt ist der Spieler mit der Nummer 10?
c) Änderungen
1. Die Anzahl der Aufstellungen wird zusätzlich in der Tabelle festgehalten.
2. Ausgabe der Spieler nach der Anzahl ihrer Aufstellungen.
3. Ausgabe des am häufigsten eingesetzten Spielers.
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 17.05.2005, 17:08   Nach oben    #8
pro_evo
Gast
 
Beiträge: n/a
Standard

ok habs .. lag daran, dass ich die connection ned geclosed hab :/
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 18.05.2005, 09:11   Nach oben    #9
sparrow
Sesselkleber
 
Benutzerbild von sparrow
 
Registriert seit: 17.01.2005
Beiträge: 567
Standard

Ehrlich?
Du musstest der Connection explizit sagen, dass sie wieder geschlossen wird?
Au weia, das mach ich nie.

Ich habe immer eine Klasse, meistens heißt sie Conman, in der alles SQL-Teugs gemanangt wird.
Dort wird auch einmalig eine Connection angelegt, und die wird erst wieder geschlossen sobald ich das Programm beende (Also beim beenden kommt extra ein con.close(); )

Sollte ich die Connection direkt nach einem Statement wieder closen?

Gruß
Sparrow
sparrow ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 18.05.2005, 16:18   Nach oben    #10
pro_evo
Gast
 
Beiträge: n/a
Standard

hmm ja kA hat mich auch gewundert, lag an der con.close() ... sobald die danach kommt gehts ...vlt. haengts auch von der art der anweisung ab, ob nur GET, oder welche wo was verändert wird .. k A
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.
Trackbacks are An
Pingbacks are An
Refbacks are Aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Java SE 1.6 Update 2 von Sun veröffentlicht Ben Nachrichten 0 06.07.2007 13:11
[PHP] bedingung falsch statt richtig Orolhawion PHP-Programmierung 9 06.06.2007 11:03
Update der Forensoftware auf Version vB 3.6.2 Ben Archiv 0 13.10.2006 00:15
Update der Forensoftware auf Version vB 3.6.1 Ben Archiv 7 27.09.2006 12:36
Update der Forensoftware auf Version vB 3.5.3 Ben Archiv 0 05.01.2006 16:54


Alle Zeitangaben in WEZ +2. Es ist jetzt 07:39 Uhr.

Nach oben
Wir nutzen das Zend Framework, vBulletin (vBulletin v3.7.3, Copyright ©2000-2008, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.0.0) und vBSEO.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44