Avatar billede thomaz Nybegynder
23. maj 2001 - 15:02 Der er 11 kommentarer og
3 løsninger

BLOB i Java !

Hvor gemmer jeg egentlig en f.eks. gif fil i min database og hvordan henter jeg den igen. Så vidt jeg ved skal min gif fil pakkes ind i en BLOB og streames til database. Når jeg vil ha\'den igen så skal den outputstreames. Er der nogen der har nogle gode forslag ??
Avatar billede pstric Nybegynder
23. maj 2001 - 16:04 #1
Det, du beskriver der, er en udemærket måde at gemme billeder i databasen på. Normalt vil det dog være mere hensigtsmæssigt at lade billederne ligge udenfor DB - eksempelvis i et images subdirectory - og så blot gemme filnavnet i DB.
Avatar billede thomaz Nybegynder
23. maj 2001 - 16:12 #2
Jeg vil nu meget gerne have BLOB til at fungere, da jeg hele dagen har forsøgt at finde ud af hvordan man gør. Men ja vist det går helt i kludder bliver jeg sikker nød til at gemme billedet på harddisken. Jeg har forgæves læst i diverse bøger og søgt på sun. Alle nævner BLOB, men igen går dybere i detaljer.

Jeg har stadigvæk ikke fundet ud af hvordan jeg streamer mine billeder

Avatar billede top Nybegynder
23. maj 2001 - 17:16 #3
Du er vel ikke så heldig at JAI kan hjælpe dig, den skulle i hvert fald kunne skrive billeder til disk .-?
Avatar billede thomaz Nybegynder
23. maj 2001 - 17:39 #4
Selvfølgelig er enhver hjælp da meget velkommen, jeg har simpelthen knoklet hele dage med at få gemt mine billeder. Selv Suns\' hjemmeside nævner ikke meget om Blob. De bliver kun nævnt. Har altså bruge for en smule kode så skal jeg nok klare resten selv. :-)
Avatar billede pstric Nybegynder
23. maj 2001 - 17:46 #5
Avatar billede thomaz Nybegynder
23. maj 2001 - 17:50 #6
pstric hmm linked var vist særlig informativ men kigger da på det -> takker
Avatar billede top Nybegynder
23. maj 2001 - 18:17 #7
JAI = Java Advanced Imaging

Det er en hel pakke du kan hente og bruge..

(jeg tror du måske forvekslede det med at jeg ville skrive din kode :-)
Avatar billede thomaz Nybegynder
23. maj 2001 - 18:26 #8
top nej nej selvfølgelig skal du ikke skrive min kode. Hmm Kigger på JAI  er en smulet smadret har programmeret for vildt det sidste stykke tid. Kan næsten ikke kend forskel på dag og nat
Avatar billede logical Nybegynder
23. maj 2001 - 18:35 #9
java.sql.Blob

Brug JDBC til at gemme til en tabel i din DB,

evt. brug PreparedStatement.setBlob... Blob er et interface, klassen kan du finde i din JDBC pakke.

Kræver JDBC 2.0 (F.eks. fra jdk1.3), og tilsvarende driver
Avatar billede mallemab Nybegynder
23. maj 2001 - 21:45 #10
prøv lige noget der ligner dette. Det virker for mig !

RandomAccessFile file = new RandomAccessFile(\"mitbillede.gif\",\"r\");
            long fillængde = file.length();//fillængde i bytes
            byte[] data = new byte[(int)længde];
            file.readFully(data);    //indlæs bytes fra fil og læg dem i bytes
            file.close();
           
            String Query = (\"Insert into tabel (billede) Values(?)\");
            pstmt = cn.prepareStatement(Query);
            pstmt.setBytes(3, data); //method to insert a stream of bytes
       
            //execute the insert statement
            pstmt.executeUpdate();
Avatar billede mallemab Nybegynder
23. maj 2001 - 21:49 #11
kolonnen du sætter ind i skal være en Blob eller evt. longblob. I en longblob er der plads til 16Mbyte. linie 3 skal iøvrigt ændres til:

byte[] data = new byte[(int)fillængde];

Avatar billede thomaz Nybegynder
24. maj 2001 - 02:37 #12
Jeg har jeg endelig fået lagt i objekt over i databasen(Access) Men pussigt nok når jeg prøver at se det i datbasen får jeg følende fejl fra Access 2000: Der opstod et problem mens Microsoft Access 2000 kommunikerede med OLE Serveren eller Active Objektet. Desuden naar jeg ser i mine tabeller skriver Accesse Lange binaere tal ?. Jeg har sikker streamet mit billed forkert. Koden se saaledes ud

String dest1 = \"Andafden\";
String dest2 = \"kaafdj\";
                String filename =\"pic6.jpg\";
               
                Connection c = DriverManager.getConnection(\"jdbc:odbc:\"+dataKildeNavn);
                pst = c.prepareStatement(\"insert into Tabel1 values(?,?)\");
                pst.setString(1,dest1);
                pst.setString(1,dest2);
                FileInputStream fis=new FileInputStream(filename);
                byte[] b= new byte[fis.available()+1];
                fis.read(b);
                pst.setBytes(2,b);
                pst.execute();
                System.out.println(\"File Stored Successfully\");

Kan det virkelig passe at jeg ikke kan saette en null vaerdi i foerste kolonne i databasen{bruger nemlig autonummeringn)
Avatar billede thomaz Nybegynder
24. maj 2001 - 16:49 #13
Takker allesammen for hjælpen. Min source koder virker, man skal bare huske på at når man gemmer et billede i Databasen skal man sende et ID nummer med, idet billedet der gemmes ikke navngives.

Med hensyn til null værdier i Access så ser det ud til at det ikke kan lade sig gøre. Har prøvet med

pst.setObject(1,null,Types.INTEGER);

Men typen stemmer ikke overens med Access,s autonummering.

Avatar billede thomaz Nybegynder
24. maj 2001 - 16:50 #14
Nu kommer det endnu sjovere at få det til at virker over RMI :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester