# Problem beim Update einer Oracle DB



## cosmic (18. Nov 2009)

Hi,
mein Update auf eine Oracle DB Tabelle kann nicht durchgeführt werden, und ich weiß nicht warum...
Für die Verbindung benutze ich den oci8 Treiber, weil ich mit dem thin komischerweise keine Verbindung aufbauen kann.

Wenn ich mein Update Statement so definiere:

```
"update xxxx set yyyyy = 1337 where zzzz = '01' and aaaa = 'renum'";
```
bleibt das Programm bei 
	
	
	
	





```
m_stmt.executeUpdate(m_strQuery);
```
 wie in einer Endlosschleife hängen.

Sobald ich das Statement mit einem Semikolon beende:

```
"update xxxx set yyyyy = 1337 where zzzz = '01' and aaaa = 'renum';";
```
wirft JAVA die ORA-00911: Ungültiges Zeichen Exception.

Ich habe schon sehr viel nachgelesen und viele verschiedene Sachen ausprobiert, aber es läuft einfach nicht.

Um jede Hilfe bin ich dankbar!




```
protected void Connect() throws Exception, SQLException {
    m_strQuery = "update xxxx set yyyyy = 1337 where zzzz = '01' and aaaa = 'renum'";
    try {
      Class.forName("oracle.jdbc.OracleDriver");
      m_conn = DriverManager.getConnection("jdbc:oracle:oci8:@" + m_strHost + ":" + m_strPort + ":" + m_strDB, m_strUser, m_strPassword);
      System.out.println("Connected...");

      m_stmt = m_conn.createStatement();
      
      m_stmt.executeUpdate(m_strQuery);
      
      m_res.close();
      m_stmt.close();
      m_conn.close();
....
```


----------



## ARadauer (18. Nov 2009)

was passiert wenn du das Query in einem DB Tool (Toad oder SQLDeveloper) ausführst?
Ich denke nicht, dass da eine Endlosschleife läuft...

m_stmt ?? wozu das m_ , das kann man sich in Java sparen. Auch wenns der Lehrer sagt... nein das macht man nicht...


----------



## velaluka (18. Nov 2009)

Hallo,
also meine erste Frage wäre, warum du keine JDBC Connection aufbauen kannst. Da ist auf jeden Fall schonmal kein gutes Zeichen. 
Bei einer JDBC Verbindung immer daran denken, das man den SID Namen und nicht den ServiceNamen wie er in der TNSNames steht verwenden muss. Die SID steht in der TNSName Konfiguration.
Ansonsten würde ich erstmal ein 
	
	
	
	





```
select sysdate from dual
```
 absetzen um zusehen ob es ein generelles Problem ist.....
Ciao velaluka


----------



## cosmic (18. Nov 2009)

Also vorweg: Mit dem oci8 Treiber steht die Verbindung. Selects sind kein Problem...

"select yyyyy from xxxxx where zzzzz = '01' and aaaaa = 'renum'"

Das Update läuft im DB Tool (Toad).


Das "m_" ist Angewohnheit...


----------



## velaluka (18. Nov 2009)

Hallo,
und welche Verbindung benutzt der Toad für das Statement. Sind es die gleichen Benutzer/Rollen die die Statements absetzen?
Ciao velalulka


----------



## cosmic (18. Nov 2009)

Hallo,
ja, alles ist gleich,
Datenbank, Benutzer, Rechte ... alles gleich.


----------



## velaluka (18. Nov 2009)

Hi,
das Ganze schonmal mit einem PreparedStatement versucht.


```
PreparedStatement ps = m_conn.prepareStatement(
"select yyyyy from xxxxx where zzzzz = ? and aaaaa = ?");
ps.setString(1, "01");
ps.setString(2, "renum");


int i = ps.executeUpdate();
```
Ciao velaluka


----------



## cosmic (18. Nov 2009)

Hi,
Problem gelöst.... Danke für eure Mühen. Der Fehler lag bei mir.

Ich habe mich selbst gesperrt, als ich ein Update über Toad durchgeführte und keinen commit bzw. rollback gemacht habe...


----------

