Example: /SQL/MySQL Write blob to file

Online Documentation   -   Statistics   -   FAQ   -   Plugin Parts (All, Dependencies)   -   Class hierarchy

New in Version 22.2 22.3 22.4 22.5 23.0 23.1 23.2 23.3 23.4 23.5 24.0 24.1

The list of the   topics,   classes,   interfaces,   controls,   modules,   global methods by category,   global methods by name,   screenshots,   licenses   and   examples.

Platforms to show: All Mac Windows Linux Cross-Platform

/SQL/MySQL Write blob to file


Required plugins for this example: MBS SQL Plugin

You find this example project in your Plugins Download as a Xojo project file within the examples folder: /SQL/MySQL Write blob to file

This example is the version from Fri, 26th Sep 2019.

Project "MySQL Write blob to file.xojo_binary_project"
Class App Inherits Application
Const kEditClear = "&Löschen"
Const kFileQuit = "Beenden"
Const kFileQuitShortcut = ""
EventHandler Sub Open() // now add that file to database dim con as SQLConnectionMBS dim cmd as SQLCommandMBS try con = new SQLConnectionMBS // connection object // where is the library? // you can place the database client library files where you want. // example code just has some convenient location for testing. con.SetFileOption con.kOptionLibraryMySQL, SpecialFolder.UserHome.Child("libmysqlclient.dylib") cmd = new SQLCommandMBS(con, "Select fblob from test_tbl") // create command object // connect to database (mySQL in our example) // server: 192.168.1.80 // port: 3306 // database: test // name: root // no password con.Connect("192.168.1.80,3306@test","root","",SQLConnectionMBS.kMySQLClient) // associate a command with connection // connection can also be specified in SACommand constructor // Usage 1. Read whole BLob(s) into internal buffers // Select BLob from our test table cmd.Execute // fetch results row by row and print results while cmd.FetchNext // after fetching a row all Long/Lob fields are automatically read into internal buffers // just like other data types dim s as SQLStringMBS = cmd.Field("fblob").asBLob MsgBox "Size of BLob is "+Str(s.BinaryLength)+" bytes" wend // Usage 2. Read BLob in pieces providing user callback for BLob data processing // Select blob from our test table cmd.Execute // do not automatically read this field into internal buffer (into corresponding SAField object) // we will provide a consumer for BLob fetching after FetchNext cmd.Field("fblob").LongOrLobReaderMode=SQLValueReadMBS.kLongOrLobReaderModeManual // fetch results row by row and print results dim Filename as string dim i as integer=0 while cmd.FetchNext i=i+1 Filename="fblob"+str(i)+".bin" dim f as FolderItem=SpecialFolder.Desktop.Child(Filename) dim d as new MyDataConsumer(f) // at that moment all fields are fetched except // those that set for manual retrieving // read them (fblob in our example) now if not cmd.Field("fblob").isNull then cmd.Field("fblob").ReadLongOrLob(d, 10*1024) // read 10 KB per block end if wend // commit changes on success con.Commit catch r as SQLErrorExceptionMBS // SAConnection::Rollback() // can also throw an exception // (if a network error for example), // we will be ready try // on error rollback changes if con<>nil then con.rollback end if catch x as SQLErrorExceptionMBS // ignore end try // show error message MsgBox r.message end try End EventHandler
End Class
Class Window1 Inherits Window
End Class
MenuBar MenuBar1
MenuItem FileMenu = "&Ablage"
MenuItem FileQuit = "#App.kFileQuit"
MenuItem EditMenu = "&Bearbeiten"
MenuItem EditUndo = "&Rückgängig"
MenuItem UntitledMenu1 = "-"
MenuItem EditCut = "&Ausschneiden"
MenuItem EditCopy = "&Kopieren"
MenuItem EditPaste = "&Einfügen"
MenuItem EditClear = "#App.kEditClear"
MenuItem UntitledMenu0 = "-"
MenuItem EditSelectAll = "&Alles auswählen"
End MenuBar
Class MyDataConsumer Inherits SQLDataConsumerMBS
EventHandler Sub Write(PieceType as integer, data as string, Length as UInt32, BlobSize as UInt32) if PieceType = kFirstPiece or PieceType = kOnePiece then size = 0 b=file.CreateBinaryFile("") if b=nil then MsgBox "Failed to create the file!" Return end if end if b.Write data size=size+Length // show progress MsgBox str(size)+" bytes of "+str(BlobSize)+" read." if PieceType = kLastPiece or PieceType = kOnePiece then b.Close b=nil end if End EventHandler
Sub Constructor(f as FolderItem) file=f End Sub
Property Private Size As UInt64
Property Private b As BinaryStream
Property Private file As FolderItem
End Class
End Project

See also:

The items on this page are in the following plugins: MBS SQL Plugin.


💬 Ask a question or report a problem