Avatar billede Slettet bruger
16. august 2001 - 09:09 Der er 2 kommentarer og
1 løsning

binær data fra sqldatabase til ftpserver

Jeg har nogle lydfiler i en sqlserver (mssql2000), og vil hente dem ud og lægge dem på en ftpserver. Dette har jeg forsøgt, men lydfilerne er ændret når de kommer over på ftpserveren.
følgende kode henter lyden ud og lægger i en fil på ftpserver, men forvansker nogle bytes:
boolean HentLydfil(SQL db, java.io.Writer MsgWriter)
{
if (exists(db))
try
{
  String stmt=\"select Message from dbo.RequestMsg where Id=\"+id;
  db.ExecuteSQL(stmt);
  if (db.rs.next())
  {
    java.io.InputStream msg = db.rs.getBinaryStream(\"Message\");
    int d = msg.read();
    while (d!=-1)
    {
      MessageWriter.write(d);
      d = msg.read();
    }
Avatar billede disky Nybegynder
16. august 2001 - 09:17 #1
hvad er det for en MessageWriter du bruger ?

Kan ikke finde den i API\'en

umiddelbart ser det rigtigt ud, men hvis din MessageWriter er hjemmelavet, kig nærmere på den
Avatar billede disky Nybegynder
16. august 2001 - 09:39 #2
Jeg tror dit problem kan skyldes at super klassen til den ftpwriter er BufferedWriter, som har en write metode der skriver en \'character\' og sådanne en er på 16 bit i java  :(

Jeg tror du skal loade f.eks. 4Kbyte data ind fra sqlbase i et byte array, typecaste det til et char[] og så skrive med write.

Jeg har vist et eksempel et sted.
Avatar billede disky Nybegynder
16. august 2001 - 09:55 #3
prøv med:
    boolean HentLydfil(SQL db, java.io.Writer MsgWriter)
    {
        if (exists(db))
        {
            try
            {
                String stmt=\"select Message from dbo.RequestMsg where Id=\"+id;
                db.ExecuteSQL(stmt);
                if (db.rs.next())
                {
                    java.io.InputStream msg = db.rs.getBinaryStream(\"Message\");

                    byte webData[]=new byte[8192];
                    char outData[]=new char[8192];
                    try
                    {
                        int data=0;
                        while(data!=-1)
                        {
                            data=in.read(webData);
                           
                            if(data!=-1)
                            {
                                for(int x=0;x<data;x++)
                                {
                                    outData[x]=(char)webData[x];
                                }
                                //nu er buffer typecastet (gad vide om man kan uden en løkke ??)
                                MessageWriter.write(outData); //gem op til 8192 chars
                            }
                        }
                    }
                    catch(IOException e)
                    {
                        e.printStackTrace(System.out);
                    }
                   
                }
            }
        }
    }
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