tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
11
ZUGRIFFE
2429
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    fenerli23 fenerli23 ist offline Mitglied Gold
    Registriert seit
    Oct 2007
    Beiträge
    176
    hi an alle,

    habe soeben dieses Programm geschrieben um ein Update auf meiner Datenbank zu erstellen jedoch werden die Werte dier erstellt werden irgendwie nicht gespeichert ... müsste ich dazu noch etwas ergänzen:

    Code :
    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
    
    package update;
     
    import java.sql.*;
     
    import oracle.jdbc.driver.*;
    import oracle.sql.*;
     
     
    class GetUpdate extends Object 
    {
        public static void setGehalt(int manager_id, int salary)
        {
            try
            {
                DriverManager.registerDriver(new OracleDriver());
                Connection conn = DriverManager.getConnection(
                        "jdbc:oracle:thin:@localhost:1521:xe", "hr", "fenerium");
                String sqlUpdate = "UPDATE employees SET Salary = ? WHERE manager_id = ?";
                PreparedStatement pstmt = conn.prepareStatement(sqlUpdate);
                pstmt.setInt(1, salary);
                pstmt.setInt(2, manager_id);
                pstmt.executeUpdate();
                conn.close();
                pstmt.close();
            }
            catch (Exception e)  
            {
                e.printStackTrace();
            }
        }
        
        public static void main (String[] args)
        {
            setGehalt(7201, 100);
        }
    }
     

  2. #2
    Tobias Köhler Tutorials.de Gastzugang
    Also bei mir klappt es so:
    Code java:
    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
    
    try
            {               
                DriverManager.registerDriver(new OracleDriver());
                Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "hr", "hr");
                
                Statement stmt = conn.createStatement();            
                String sql = "UPDATE EMPLOYEES SET FIRST_NAME='Tobias' WHERE EMPLOYEE_ID=100";
                stmt.execute(sql);
                
                logger.info("UPDATE durchgeführt");
                
                sql = "SELECT * FROM EMPLOYEES ORDER BY EMPLOYEE_ID";
                ResultSet rSet = stmt.executeQuery(sql);
                
                while (rSet.next())         
                    logger.info("EMPLOYEE_ID: " + rSet.getInt("EMPLOYEE_ID") + " - " + rSet.getString("FIRST_NAME"));           
                
                rSet.close();
                stmt.close();
                conn.close();
            }
            catch(SQLException e)
            {
                logger.error("Konnte keine Verbindung herstellen.", e);
            }
     

  3. #3
    fenerli23 fenerli23 ist offline Mitglied Gold
    Registriert seit
    Oct 2007
    Beiträge
    176
    bei mir klappt es jetzt auch hatte versehentlich manager_id und salary verwechselt.

    bei deinem code wundert mich das:
    Code :
    1
    
    logger.info(".....")
    das kenne ich gar nicht muss dazu etwas importieren vorher?
     

  4. #4
    Tobias Köhler Tutorials.de Gastzugang
    Tut hier eigentlich nix zur Sache. Such mal nach Log4J, daher kommt das. Ersetzt letztendlich die System.out.println-Einträge. Somit kannst du später, wenn ein Programm "in Betrieb genommen wird" und ein Fehler auftritt, leichter debuggen, da du zB einfach nur den Writer änderst und die Konsolenausgaben auf eine Datei umleitest.
     

  5. #5
    fenerli23 fenerli23 ist offline Mitglied Gold
    Registriert seit
    Oct 2007
    Beiträge
    176
    kannst du mal hier nachschauen was falsch ist wollte einen neuen Employee einfügen:

    Code :
    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
    
    import java.sql.*;
     
    import oracle.jdbc.driver.*;
    import oracle.sql.*;
     
    public class GetInsert 
    {
     
        public static void main(String[] args)
        {
            
            try        
            {   
                DriverManager.registerDriver(new OracleDriver());            
                Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "hr", "fenerium");                        
                Statement stmt = conn.createStatement();   
                
                //Hinzufügen eines neuen Arbeitnehmer
                /*(EMPLOYEE_ID, FIRST_NAME, LAST_NAME, " +
                "EMAIL, HIRE_DATE, JOB_ID, GEB_ID, DEPARTMENT_ID, SALARY)" +
                "PHONE_NUMBER, MANAGER_ID" + */
                String insertQuery = "INSERT INTO employees VALUES" +
                        "(211, 'Hans','Wurstl', 'wurst', '01.10.2007', " +
                        "'AC_SPEZ','29.08.1985', 80, 7500, '06131/21212', 101)";
                
                stmt.executeUpdate(insertQuery);
                System.out.println("INSERT durchgeführt");
                insertQuery = "SELECT * FROM EMPLOYEES ORDER BY EMPLOYEE_ID";
                ResultSet rSet = stmt.executeQuery(insertQuery);
                while (rSet.next())
                    System.out.println("MANAGER_ID: " + rSet.getInt("MANAGER_ID") + " - " + rSet.getString("SALARY") + " - " +rSet.getString("LAST_NAME"));                                   
                rSet.close();            
                stmt.close();            
                conn.close();        
            }        
            catch(SQLException e)        
            {            
                System.err.println("error messgae: " + e.getMessage());
                e.printStackTrace();
                Runtime.getRuntime().exit(1);       
            } 
        }
    }
    Geändert von fenerli23 (30.10.07 um 15:04 Uhr)
     

  6. #6
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.335
    Hallo,

    was passiert denn?

    Hast du es schon mal mit
    Code :
    1
    
    connection.commit();
    ?

    MFG

    zEriX
     
    Es ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)

  7. #7
    Tobias Köhler Tutorials.de Gastzugang
    Was genau wird denn für ein Fehler ausgegeben?
    Ich finde eigenartig:
    Employee ID = 211 -> Ist Employee ID nicht Primary Key und du musst den gar nicht setzen?
    Email ist glaub ich unwichtig
    JOB_ID: Muss das nicht eine Zahl sein?
     

  8. #8
    fenerli23 fenerli23 ist offline Mitglied Gold
    Registriert seit
    Oct 2007
    Beiträge
    176
    diese geschieht:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    error messgae: ORA-00917: Komma fehlt
     
    java.sql.SQLException: ORA-00917: Komma fehlt
     
        at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
        at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
        at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
        at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:743)
        at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:207)
        at oracle.jdbc.driver.T4CStatement.executeForRows(T4CStatement.java:946)
        at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1169)
        at oracle.jdbc.driver.OracleStatement.executeUpdateInternal(OracleStatement.java:1615)
        at oracle.jdbc.driver.OracleStatement.executeUpdate(OracleStatement.java:1580)
        at insert.GetInsert.main(GetInsert.java:28)
     

  9. #9
    Tobias Köhler Tutorials.de Gastzugang
    Woher kommt das "Komma fehlt"? Seh ich nciht
     

  10. #10
    fenerli23 fenerli23 ist offline Mitglied Gold
    Registriert seit
    Oct 2007
    Beiträge
    176
    ich auch nicht ich shcau mal jetzt nochmal gründlcih drüber mal schauen ob ich es finden werde...
     

  11. #11
    fenerli23 fenerli23 ist offline Mitglied Gold
    Registriert seit
    Oct 2007
    Beiträge
    176
    den Kommafehler habe ich nun behoben jetzt kriege ich diese Fehlermeldung:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    error messgae: ORA-00947: Anzahl der Werte reicht nicht aus
     
    java.sql.SQLException: ORA-00947: Anzahl der Werte reicht nicht aus
     
        at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
        at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
        at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
        at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:743)
        at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:207)
        at oracle.jdbc.driver.T4CStatement.executeForRows(T4CStatement.java:946)
        at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1169)
        at oracle.jdbc.driver.OracleStatement.executeUpdateInternal(OracleStatement.java:1615)
        at oracle.jdbc.driver.OracleStatement.executeUpdate(OracleStatement.java:1580)
        at insert.GetInsert.main(GetInsert.java:38)

    so sieht die Tabelle aus:
    CREATE TABLE "EMPLOYEES"
    "EMPLOYEE_ID" NUMBER(6,0),
    "FIRST_NAME" VARCHAR2(20),
    "LAST_NAME" VARCHAR2(25) CONSTRAINT "EMP_LAST_NAME_NN" NOT NULL ENABLE,
    "EMAIL" VARCHAR2(25) CONSTRAINT "EMP_EMAIL_NN" NOT NULL ENABLE,
    "PHONE_NUMBER" VARCHAR2(20),
    "HIRE_DATE" DATE CONSTRAINT "EMP_HIRE_DATE_NN" NOT NULL ENABLE,
    "JOB_ID" VARCHAR2(10) CONSTRAINT "EMP_JOB_NN" NOT NULL ENABLE,
    "SALARY" NUMBER(8,2),
    "COMMISSION_PCT" NUMBER(2,2),
    "MANAGER_ID" NUMBER(6,0),
    "DEPARTMENT_ID" NUMBER(4,0),
    "GEB_ID" DATE
    Geändert von fenerli23 (30.10.07 um 15:38 Uhr)
     

  12. #12
    Avatar von torax13
    torax13 torax13 ist offline Mitglied Gold
    Registriert seit
    Jul 2007
    Beiträge
    155
    Code java:
    1
    2
    3
    
    String insertQuery = "INSERT INTO employees VALUES" +
                        "(211, 'Hans','Wurstl', 'wurst', '01.10.2007', " +
                        "'AC_SPEZ','29.08.1985', 80, 7500, '06131/21212', 101)";
    Ganz schlechter Stil

    Verwende bitte IMMER die Schreibweise 'insert into tabelle (spalte1, spalte2) values (value1, value2)'

    Warum? Zum einen wird der Code lesbar (woeher weiß ich den sonst welcher Wert in welche Spalte geht, ohne mir nebenbei die Tabellendefinition anzuschauen.

    Zuma anderen, könnte mal jemand auf die Idee kommen Spalten hinzuzufügen / entfernen.. An die Effekte die dann auftreten wag ich lieber nicht zu denken.

    Noch ein Hinweis: gib immer expiziet das Format von Datumswerten an (to_data('datum', 'format'). Warum? Nun, die Software könnte mal auf eine Datenbank tereffen, wo die NLS Parameter anders eingestellt sind.

    Mit Tip 1 sollte sich auch Dein Problem einkreisen lassen.

    achja, noch ein Tipp:
    Mach das close() der Statements und Connection im finally{} Block. Sonst bleiben Sessions in der DB offen, wenn doch mal nen Fehler Auftritt....
     
    Falls ich entgegen meiner Gewohnheiten mal einen hilfreichen Beitrag schreibe, freu ich mich über eine positive Bewertung.

Ähnliche Themen

  1. Update-Befehl auf Oracle-Datenbank
    Von kallkar im Forum Relationale Datenbanksysteme
    Antworten: 2
    Letzter Beitrag: 15.01.11, 14:40
  2. Mit JDBC Zugriff auf lokale Oracle 10 Datenbank
    Von danielandross im Forum Relationale Datenbanksysteme
    Antworten: 2
    Letzter Beitrag: 19.02.08, 08:49
  3. SAP R/3 --> JDBC -->Oracle
    Von danielandross im Forum Relationale Datenbanksysteme
    Antworten: 3
    Letzter Beitrag: 12.02.08, 15:26
  4. Oracle JDBC Driver FAQ
    Von Thomas Darimont im Forum Java
    Antworten: 0
    Letzter Beitrag: 14.02.06, 13:17
  5. Antworten: 1
    Letzter Beitrag: 16.09.04, 14:11