Zum Inhalt springen

Problem mit einfügen einer Datenbank über Java!


Cyrill

Empfohlene Beiträge

Hi

Ich hab ein Problem mit dem einfügen eines Wertes in eine Datenbank (In ein Feld mit dem Typ Clob)!

Mein Code sieht so aus:

<BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>

try

{

Connection con = null;

Statement stmt = null;

ResultSet rs = null;

con = pool.getConnection();

if (DEBUG) System.out.println("con :" + con);

stmt = con.createStatement();

if (DEBUG) System.out.println("stmt :" + stmt);

//Initialisierung des Clobs

CLOB clob = null;

stmt.execute("SELECT text from helptext");

rs = stmt.getResultSet();

while (rs.next())

{

clob = ((OracleResultSet)rs).getCLOB("text");

}

//ERROR (ORA-22920) == The row containing the LOB value must be locked before updating the LOB value

OracleCallableStatement cstmt = (OracleCallableStatement) con.prepareCall ("BEGIN DBMS_LOB.OPEN(" +

" ?, DBMS_LOB.LOB_READWRITE); END;");

cstmt.setCLOB(1, clob);

cstmt.execute();

String s = this.text; // some Unicode character data

java.io.Writer wr = clob.getCharacterOutputStream();

//Write the input stream containing your ASCII data to the output stream. The write operation is finalized when you call the flush() method on the OutputStream object.

char[] b = s.toCharArray(); // converts 's' to a character array

wr.write(B);

wr.flush();

//Clean up:

cstmt = (OracleCallableStatement) con.prepareCall ("BEGIN DBMS_LOB.CLOSE(?); END;");

cstmt.setCLOB(1, clob);

cstmt.execute();

wr.close();

stmt.close();

con.close();

}

catch (SQLException sqle)

{

if (DEBUG) sqle.printStackTrace();

System.err.println("SQL Exception :" + sqle);

}

catch (Exception e)

{

if (DEBUG) e.printStackTrace();

System.err.println("Exception :" + e);

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Backup-Verschläfer,

ich habe zwar keine Ahnung was ein clob oder lob ist, aber die Fehlermeldung :

[exec] java.sql.SQLException: ORA-22292: Cannot open a LOB in read-write mode without a transaction

[exec] ORA-06512: at "SYS.DBMS_LOB", line 599

[exec] ORA-06512: at line 1

sagt mir, soweit ich das beurteilen kann, daß Du diesen Wert nur dann editieren darfst, wenn du den "Locken " tust.

That means, wie auch schon die Fehlermeldung es andeutet, du musst deinen Zugriff, eigentlich wie alle Datenbankzugriffe, in eine Transaktion packen:

Gibt so nette Methoden wie

beginTransaction();

endTransactin();

...

Schau mal in die Doku

Mfg

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...