[JAVA] Blob uit database halen via MyODBC

Pagina: 1
Acties:
  • 103 views sinds 30-01-2008
  • Reageer

  • hstoker
  • Registratie: Mei 2002
  • Laatst online: 05-05 18:18
(jarig!)
Als ik een Blob (een jpg-plaatje) uit een MySQL database wil halen via MyODBC, gebruik ik hiervoor de volgende code:

code:
1
2
Blob aBlob = rs.getBlob(1);
byte[] allBytesInBlob = aBlob.getBytes(1, (int) aBlob.length());


Alleen krijg ik dan:

code:
1
java.lang.UnsupportedOperationException


Waar ligt dit aan... is dit een tekortkoming van JDBC, MyODBC, MySql, Java, of doe ik gewoon iets verkeerd????

Dutch: If it bleeds, we can kill it.


  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025
is de kolom wel een Blob? Een ResultSet telt vanaf 1, en niet vanaf 0 zoals je in java zou verwachten.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Je zou dan geen unsupportedOperation mogen krijgen. Ik denk eerder dat niet alles van de jdbc driver van mysql is geimplementeerd. Ik krijg trouwens bij access een 'this function is unsupported' foutmelding. Check anders de jdbc driver ff van mysql, die moet wel meer helderheid verschaffen.

  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025
Ook niet als je een getBlob doet op een niet Blob kolom? Ik kan me voorstellen dat je dan zo'n soort foutmelding krijgt.

Ik weet zeker dat het kan, want ik het laatst zelf ook nog gebruikt. Als je tot morgen hebt zoekt ik het eff op op kantoor. MayB is idd je driver oud, en heeft de Blob ondersteuning nog niet. MySQL is dan wel snel en goedkoop, maar veel (rand)functionaliteit is nog maar deels af.

  • hstoker
  • Registratie: Mei 2002
  • Laatst online: 05-05 18:18
(jarig!)
Kolom is wel goed, volgende werkt nl. ook niet:
code:
1
Blob aBlob = rs.getBlob("Picture");

'k ga nu ff kijken naar de driver...

*Update: Installeren van MyODBC 3.51 ipv 2.50 heeft geen effect :(

Dutch: If it bleeds, we can kill it.


  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025
is de getBinanaryStream methode geen optie?

  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025
Waar geeft ie de foutmelding op trouwens? op de getBlob? Of de getBytes?

  • hstoker
  • Registratie: Mei 2002
  • Laatst online: 05-05 18:18
(jarig!)
zneek schreef op 09 augustus 2002 @ 11:20:
is de getBinanaryStream methode geen optie?
Ben ik nu ook aan het onderzoeken, krijg een melding waarvan ik niet weet wat het betekent:
code:
1
Maximum memory usage: 153228 bytes (150k)

Heb je btw op kantoor nog wat kunnen vinden???
Waar geeft ie de foutmelding op trouwens? op de getBlob? Of de getBytes?
Op de getBlob.

Dutch: If it bleeds, we can kill it.


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
http://www.geocrawler.com/archives/3/193/2000/3/0/3496510/

Kijk hier eens, hier toveren ze iets in elkaar met een bytestream. Ik heb hem trouwens nog niet kunnen testen. Maar getBlob( ) zou ook gewoon moeten werken.

Misschien de beste tip: Gebruik geen blob's om pics in op te slaan. Het heeft echt een belabberde performance

  • hstoker
  • Registratie: Mei 2002
  • Laatst online: 05-05 18:18
(jarig!)
Hmmm... en hoe zou je ze dan wel op willen slaan?

Dutch: If it bleeds, we can kill it.


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
hstoker schreef op 09 augustus 2002 @ 11:39:
Hmmm... en hoe zou je ze dan wel op willen slaan?
Sla een URL op naar het plaatje. Ik zou zeggen, maak eens een benchmark tussen die twee en bepaal zelf wat je wilt: Wil je 100% zeker zijn dat het plaatje aanwezig is tegen een lage performance of wil je hoge zekerheid met een goede performance. Een database koppeling levert nou eenmaal (redelijke) overhead op.

  • hstoker
  • Registratie: Mei 2002
  • Laatst online: 05-05 18:18
(jarig!)
Tsja... dan ga ik toch voor het plaatje zelf in Dbase opslaan... 'k heb eigenlijk geen keus, ik moet werken met bestaande databases en die converteer je niet zomaar allemaal.

En ik heb btw ook liever 1 Dbase op m'n HD dan 20.000 losse bestanden, scheelt nogal wat ruimte.

Duss.....

Dutch: If it bleeds, we can kill it.


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Hoezo scheelt dat ruimte dan? Die databases worden ook gewoon binair opgeslagen en nemen even veel ruimte in (misschien zelfs meer, maar dat weet ik niet precies) dan een gewoon los filetje.
Plus dat een filesystem gemaakt is om snel en betrouwbaar files te serveren. Een database is gemaakt om snel en betrouwbaar informatie te leveren.

edit:

Maar heb je al naar dat voorbeeld gekeken?

  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025
hstoker schreef op 09 augustus 2002 @ 11:33:
[...]
Ben ik nu ook aan het onderzoeken, krijg een melding waarvan ik niet weet wat het betekent:
code:
1
Maximum memory usage: 153228 bytes (150k)

Heb je btw op kantoor nog wat kunnen vinden???

[...]
Op de getBlob.
Ik heb idd wat gevonden, maar dat is het uitlezen van een Java Object uit een Blob kolom. Dat gaat als volgt:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    public Object readObject(String query) throws IOException {        
        Object w = new Object();
        this.connect();
        try{
            
            ResultSet rs = con.createStatement().executeQuery(query);
            ObjectInput in = new ObjectInputStream(rs.getBinaryStream(1));
            w = (Object)in.readObject();
            
        }catch(SQLException esql){
            esql.printStackTrace();
        }catch(Exception e){
            e.printStackTrace();
        } finally {
            this.disconnect();
        }
        return w;
    }// end readObject

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Hier lezen ze de blob dus ook uit met een BinaryStream. Dus als ik jou was zou ik gewoon getBinaryStream(1) gebruiken om je blob uit te lezen

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • hstoker
  • Registratie: Mei 2002
  • Laatst online: 05-05 18:18
(jarig!)
Glimi schreef op 09 augustus 2002 @ 12:04:
Hoezo scheelt dat ruimte dan? Die databases worden ook gewoon binair opgeslagen en nemen even veel ruimte in (misschien zelfs meer, maar dat weet ik niet precies) dan een gewoon los filetje.
Plus dat een filesystem gemaakt is om snel en betrouwbaar files te serveren. Een database is gemaakt om snel en betrouwbaar informatie te leveren.
Lose bestanden nemen meer ruimte in op de HD... heeft iets met clustergrootte te maken, dat alles niet effectief gebruikt wordt... nieuw bestand gaat verder in volgende cluster... of zoiets.. :)

en een database kan meestal ook nog compressen.

En dat voorbeeld, daar hebben ze de grootte van de blob in een aparte kolom opgeslagen, waardoor je weet hoeveel data er is... mijn probleem daarmee is dat ik dat niet weet. Ik lees het dus zo uit:
code:
1
BufferedInputStream aBlob = new BufferedInputStream( rs.getBinaryStream("Picture"));

Hoe kan ik hier dan de grootte van bepalen??

Dutch: If it bleeds, we can kill it.


  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025

  • hstoker
  • Registratie: Mei 2002
  • Laatst online: 05-05 18:18
(jarig!)
Nee.... Moet dat dan :)

(Heeft ik nl. ook wel op de HD staan)

Dutch: If it bleeds, we can kill it.

Pagina: 1