Blob als String in Konsole ausgeben, in datei schreiben

tplanitz

Erfahrenes Mitglied
Hallo,

zu oben genanntem Thema habe ich nichts so richtig im forum gefunden, deswegen stelle ich mein Problem kurz vor.

In einer Spalte stehen Werte als Blob Datentyp.
Zu erwartende Ausgabe in der Konsolow b.z.w. in der Datei:
'AA056BBFFFF22122322...'
ich bekomme im Moment diese Ausgab:
I”€G”`E”@C” A”?

Nun habe ich im Forum gelesen das man die Property für den JDBC treiber "translate binary=true" setzen kann, das geht aber scheinbar nicht mit dem von mir verwendetetem, auch ein umstellen des InputStreamReader auf UTF8 (char set der DB) hat nichts gebracht. Hat jemand eine Idee wie ich nun die Ausgabe auf der Konsole (ich verwende Netbeans 5.5.) bekomme ?


Folgendes Programm funktioniert, bringt aber nicht die gewünschte ausgabe
PHP:
import java.io.*;
import java.sql.*;
public class HelloBlob2String {
    
    /** Creates a new instance of HalloBlobAusDB */
    public HelloBlob2String() {
    }
    public static void main(String [] args) {
        System.out.println("hallo db\n----------------------------------\n----------------------------------");
        
        String url = "jdbc:oracle:thin:@db:1521:sid";
        String query = "select a_blob from T_BLOB";
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
        } catch(Exception ex) {
            System.out.println("Can't find Database driver class: " + ex);
            return;
        }
        try {
            
            Connection con = DriverManager.getConnection(url,	"warehouse_dev_2", "warehouse_dev_2");
            
            Statement stmt = con.createStatement();
            ResultSet rs = stmt.executeQuery(query);
            
            while (rs.next()) {
                
                Blob blob = rs.getBlob("A_BLOB");
                System.out.println("als blob = " + blob.length() + rs.getBytes("A_BLOB"));
                InputStream inStream = blob.getBinaryStream();
                InputStreamReader inputStream = new InputStreamReader(inStream, "UTF8") ;
                BufferedReader reader = new BufferedReader(inputStream );
                System.out.println(reader.readLine());
                inputStream.close();
            }
        } catch (Exception ex) {
            
            System.out.println("SqlException =  " + ex);
        }
    }
    
}

Ich hoffe jemand kann helfen

Viele Grüße
 
Im Prinzip sollte das schon so gehen, ich mach das ähnlich per
Java:
BufferedReader br = new BufferedReader(new InputStreamReader(in, Charset.forName("UTF-8")));
wobei hier 'in' der Stream vom Blob ist.

Bist Du Dir sicher, das die DB das in UTF-8 abspeichert?
Eventeull kannst Du das ja mal in einer Datei abspeichern und mit nem Texteditor öffnen. Viele Texteditoren bieten die Möglichkeit das encoding 'on-the-fly' zu ändern, so das Du sehen kannst, was es denn wirklich ist...

Gruß
 
Hallo,

also die DB gibt mir UTF-8 aus wenn ich folgendes Abfrage:
PHP:
select * from nls_database_parameters

Ich bin echt verzweifelt.
Das schreiben in eine Datei hatte im Übrigen das selbe Ergebnis.
 
Hallo,

also Folgendes, meine Oracle DB ist auf WIndows XP installiert,
so wie ich schon sagte schreibt die Datenbank mit UTF8.
Der Clou ist das es noch eine zusätzliche Einstellung für die Oracle DB in der Windows Registry gibt, da steht auch noch mal eine Einstellung für NLS_LANG drinne:
PHP:
HKEY_LOCAL_MACHINE->SOFTWARE->ORACLE
Diese habe ich jetzt auch auf UTF-8 gestellt und es hat funktioniert.
Außerdem muß man schon beim reinschreiben in die DB beachten das ein z.B. A nicht bei der Ausgabe angezeigt wird als 0A sondern als 41.
Diese vielen kleinen Dinge haben mich in die Falle Tappen lassen.

Jetzt geht es aber

Grüße
 
Zurück