Base mit MySQL - Datei in BLOB-Feld einfügen

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Martin45527
Beiträge: 7
Registriert: Fr, 26.08.2011 15:37

Base mit MySQL - Datei in BLOB-Feld einfügen

Beitrag von Martin45527 »

Hallo zusammen,

ich arbeite mich derzeit ein wenig in Base ein und nutze als Datenbank MySQL.

So einigermaßen komme ich klar, auch wenn es ab und an Probleme beim Anlegen von Fremdschlüsseln gibt, die ich bisher nicht einordnen konnte. Aber deswegen melde ich mich hier nicht. Ich will eingescannte Dokumente - möglichst PDF-Dateien, alternativ notfalls auch Grafiken - in der Datgenbank ablegen und suche eine Möglichkeit, wie dies in der Kombination mit MySQL geht.

Hat jemand Hinweise oder Links für dieses Problem für mich?

Im vorraus vielen Dank!

Der Martin
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Base mit MySQL - Datei in BLOB-Feld einfügen

Beitrag von DPunch »

Aloha

Beispielcode (auf die Schnelle zusammengebastelt, ohne Fehlerbehandlung etc.) - liest ein File ein, schreibt es in eine als (MEDIUM-)BLOB definierte MySQL-Tabellenspalte, liest das BLOB wieder aus und schreibt es zurück auf die Festplatte:

Code: Alles auswählen

	'##### Anpassen
	sDatabaseName = "meineDatenbank" 'Name, unter dem die Datenbank bei Base registriert ist
	sTableName = "meineTabelle" 'Fragliche Tabelle
	sColumName = "meineBLOBSpalte" 'Name der Spalte, in der das BLOB untergebracht ist/werden soll
	sPrimaryKeyColumn = "ID" 'Name der Spalte, in der PK steht
	sUser = "" 'Username
	sPassword = "" 'Passwort
	sInsertFileURL = "D:\meinBild.jpg" 'URL des einzulesenden Files
	sOutputURL = "D:\meinBild2.jpg" 'URL, an die das File zurückgechrieben werden soll
	'#####
	sInsertFileURL = ConvertToURL(sInsertFileURL)
	sOutputURL = ConvertToURL(sOutputURL)
	oFileAccess = CreateUnoService("com.sun.star.ucb.SimpleFileAccess")
	Dim aByteArray() as Byte
	
	oDatabaseContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
	oDataSource = oDatabaseContext.getByName(sDatabaseName)
	oConnection = oDataSource.getConnection(sUser,sPassword)
		
	nFileSize = oFileAccess.getSize(sInsertFileURL)
	oInputStream = oFileAccess.openFileRead(sInsertFileURL)
	oInputStream.readBytes(aByteArray,nFileSize)
	oInputStream.closeInput
	
	sSQL = "INSERT INTO `" & sTableName & "`(`" & sColumName & "`) VALUES(?)"
	oPreparedStatement = oConnection.prepareStatement(sSQL)
	oPreparedStatement.setBytes(1,aByteArray)
	oPreparedStatement.executeUpdate
	
	sSQL = "SELECT LAST_INSERT_ID() FROM `" & sTableName & "`"
	oPreparedStatement = oConnection.prepareStatement(sSQL)
	oResult = oPreparedStatement.executeQuery
	oResult.Next
	nLastID = oResult.getInt(1)
	
	sSQL = "SELECT `" & sColumName & "` FROM `" & sTableName & "` WHERE `" & sPrimaryKeyColumn & "` = " & nLastID
	oPreparedStatement = oConnection.prepareStatement(sSQL)
	oResult = oPreparedStatement.executeQuery
	oResult.Next	
	aByteArray = oResult.getBytes(1)
	oOutputStream = oFileAccess.openFileWrite(sOutputURL)
	oOutputStream.writeBytes(aByteArray)
	oOutputStream.closeOutput
Martin45527
Beiträge: 7
Registriert: Fr, 26.08.2011 15:37

Re: Base mit MySQL - Datei in BLOB-Feld einfügen

Beitrag von Martin45527 »

Vielen Dank! Ich werde es mit diesem Code probieren.

Martin
Antworten