Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Datei per Batch in Datenbank speichern

Frage Entwicklung Batch & Shell

Mitglied: 20535

20535 (Level 1)

23.11.2005, aktualisiert 29.11.2005, 6282 Aufrufe, 18 Kommentare

Guten Morgen zusammen,

ich habe folgendes Problem.

Ich benötige eine Batch Datei die eine Datenbankverbindung aufbaut. Das ist soweit klar. Anschließend muss in die Datenbank einiges geschrieben werden, das ich über eine fertige SQL Datei machen kann. Das Problem ist jetzt aber, in ein Feld in der Datenbank muss der Inhalt einer beliebigen Datei, zB Powerpoint Präsentation oder eine Excel Datei. Bin mir derzeit nicht sicher ob das Problem auf MySQL Ebene zu lösen ist, oder auf Batch Ebene.

Lieben Gruß,
Stephan
Mitglied: 16640
23.11.2005 um 12:37 Uhr
hallo Stephan,

'MySQL' ist nicht die DB, mit der ich mihc normalerweise beschäftige - aber Du wirst sicherlich nicht den Inhalt von Powerpoint- oder Excel-Dateien in einer Datenbank speichern wollen, sondern die Dateien selbst. Stichwort dazu: Datentyp BLOB (Binary Large OBject). In den BLOB-Datenfeldern kannst Du alles an binären Objekten ablegen, was Du greifen kannst.
Wenn Du die Tabelle entsprechend definiert hast, wirst Du sicherlich das ganze aus einer Batchdatei heraus abwickeln können.

Gruß
dba
Bitte warten ..
Mitglied: 20535
23.11.2005 um 14:27 Uhr
Hallo dba,

ja, sicherlich die Datei selber, "Inhalt" hat vielleicht ein bisschen Verwirrung gestiftet.
Die Datenbank an sich steht ja und der Feldtyp ist Blob. Das eigentliche Problem ist, wie lese ich die binäre Datei ein und kriege sie anschließend in das entsprechende Datenbankfeld über die Kommandozeile.
Kenne mich leider mit Batch Dateien nicht so gut aus. Ich habe versucht das mit FOR /F zu machen, das scheint aber nur mit Textdateien zu gehen. Und sich irgendwie den Dateiinhalt mit TYPE ausgeben lassen bringt mich im Moment auch nicht weiter.

Gruß,
Stephan
Bitte warten ..
Mitglied: Guenni
24.11.2005 um 06:54 Uhr
@20535

Hi,

alles auf Kommandozeilenebene.

Wechsle in das Verz., in dem sich deine Dateien befinden.

Erstelle eine Datei, z.B. dateien.txt. Inhalt der Datei könnte sein:

<font class="code">
Umsatz2005,mappe01.xls
PraesMeyer,praesmeyer.pps
</font>

Wichtig!: Letzte Zeile nicht mit Return abschließen, Cursor
hinter pps stehenlassen und abspeichern.

Erstelle eine weitere Datei, z.B. insert.sql. Inhalt der Datei:

<font class="code">
LOAD DATA
LOCAL INFILE 'dateien.txt'
INTO TABLE tabellenname(feldname1,feldname2)
FIELDS TERMINATED BY ",";
</font>

Wenn deine Tabelle eh' nur 2 Felder hat, kannst du die Angabe der Spaltennamen
weglassen.

Starte nun den mysql-Monitor, event. mit vollem Pfadnamen, z.B. c:\mysql\mysql
oder wo immer du mysql installiert hast.

Wenn der Monitor gestartet ist, gibst du einen Backslash gefolgt von einem Punkt ein,
ein Leerzeichen, dann den Dateinamen des Scripts zum Einlesen:

mysql>\. insert.sql, dann Enter.

Hoppla, vorher natürlich zur Datenbank wechseln: mysql> \u Datenbankname, sorry.

Anschließend läßt du dir mit select * from tabellenname den Inhalt ausgeben, welcher
sein müßte(die zwei Datenfelder betreffend):

<table border="1">
<tr>
<td>feldname1</td><td>feldname2</td>
</tr>
<tr>
<td> Umsatz2005</td><td> mappe01.xls </td>
</tr>
<tr>
<td> PraesMeyer</td><td> praesmeyer.pps</td>
</tr>
</table>


Gruß
Günni
Bitte warten ..
Mitglied: 20535
24.11.2005 um 08:17 Uhr
Guten Morgen,

hmmm, danke Günni, immerhin was dazu gelernt. Aber leider nicht das was gesucht ist.
In deinem Bespiel habe ich jetzt den Dateinamen in dem Datenbankfeld. Was da aber rein muss ist die Datei selber. Deswegen ist der Datenbankfeldtyp ja auch Blob =)

Gruß,
Stehan
Bitte warten ..
Mitglied: Guenni
24.11.2005 um 08:31 Uhr
@20535

Hi,

nicht nur der Dateiname ist in dem BLOB-Feld enthalten, auch die Datei selber.

Das select zeigt dir nur an, dass die Datei gespeichert wurde. Anzeigen kannst
du sie natürlich nur in einem Web-Browser z.B. über ein PHP-Script.

Brauchst du dazu auch noch Hilfe?

Gruß
Günni
Bitte warten ..
Mitglied: 20535
24.11.2005 um 08:37 Uhr
Achso, hatte mal eben nach LOAD DATA gegoogelt weil ich den Befehl nicht kannte und da kam bei einem kurzen Überblick das Gefühl, dass das nur mit Flatfiles geht.
Dann werde ich das gleich mal probieren, dankeschön!
Bitte warten ..
Mitglied: 20535
28.11.2005 um 10:45 Uhr
Hallo Zusammen,

leider will es immer noch nicht so recht.

Bei mir lädt er immer nur den Dateinamen in das Blobfeld aber nicht den Dateiinhalt.

<font class="code">LOAD DATA LOCAL INFILE 'file.txt' INTO TABLE db_file
FIELDS TERMINATED BY ','
(DB_FILE_ID,FILE_SIZE, CONTENT);
</font>

<font class="code">file.txt:
11,231654,test.xls
</font>

anschließend steht nun in der tabelle db_file in der Spalte Content:
<font class="code">00000000h: 74 65 73 74 2E 78 6C 73 ; test.xls
</font>
sprich, nur der Dateiname.

Habe ich vielleicht irgendetwas übersehen?

Gruß,
Stephan
Bitte warten ..
Mitglied: 15034
28.11.2005 um 11:01 Uhr
Was passiert denn, wenn Du das manuell über das MySQL Control Center machst? Hast Du dann die Dateim im Feld?


Gruss Peter

http://www.administrator.de/index.php?mod=show_public_profile&nr=15 ...
Bitte warten ..
Mitglied: 20535
28.11.2005 um 11:05 Uhr
Hi,

Ja, wenn ich die Datei über ein GUI in das Feld uploade beinhaltet sie die gesamte Datei.

Gruß,
Stephan
Bitte warten ..
Mitglied: 15034
28.11.2005 um 11:18 Uhr
EI dann gehe mal auf sysinternals.com und lade Dir den Filemonitor runter, starte diesen und schau mal im Protokoll, ob während der Verarbeitung der Batch das zu importierende File angezogen wird. Kannst mir auch das LOG mal senden.

Gruss Peter
mailto:troubleni@arcor.de
Bitte warten ..
Mitglied: 20535
28.11.2005 um 11:41 Uhr
Also laut Filemonitor wird die Datei test.xls nicht angerührt. Lediglich die Batch Datei, die file.txt und die insert.sql.
Bitte warten ..
Mitglied: 15034
28.11.2005 um 11:47 Uhr
... das dachte ich mir! Dann musst nur noch herausfinden warum. Ich denke einmal darüber nach, falls Du vorher die Lösung hast, lasse es mich wissen!
Bitte warten ..
Mitglied: 20535
29.11.2005 um 09:01 Uhr
Ich würde ganz einfach behaupten, dass LOAD DATA gar nicht den Dateiinhalt läd, wieso auch. Nirgendwo steht, dass dieser Befehl das tun sollte.
Daher brauche ich eine andere Lösung
Bitte warten ..
Mitglied: 15034
29.11.2005 um 09:10 Uhr
Genau, das habe ich beim Reproduzieren des Problems auch festgestellt. Ich suche nun nach einer anderen Lösung!

Gruss Mummenschanz
(dies ist auch meine skype-ID)
Bitte warten ..
Mitglied: 15034
29.11.2005 um 12:19 Uhr
Hallo schau mal hierhin:

16.3. Ist es sinnvoll, Bilder in einer Datenbank abzulegen?


http://www.php-faq.de/q/q-db-blob.html
Bitte warten ..
Mitglied: 20535
29.11.2005 um 12:50 Uhr
Darum geht es hier nicht ;)
Es ist nur ein kleiner Part eines riesen Projekt eines führenden Pharmaciekonzerns. Ob es sinvoll ist oder nicht spielt keine Rolle. Ich muss die Dateien nur da rein kriegen.

Gruß,
Stephan
Bitte warten ..
Mitglied: Biber
29.11.2005 um 14:21 Uhr
Moin Talyr,
wenn ich mich als alter Bätch-Anwender auch mal einmengen darf...

Wenn Daten oder in diesem Fall Dateien in ein BLOB-Feld gespeichert werden sollen, ist die Mimik -relativ unabhängig von der verwendeten Programmiersprache- IMHO gleich:
- der Dateiinhalt wird Zeichen für Zeichen und von Dateianfang bis Dateiende binär in eine Variable gelesen,
- diese Variable wird in das BLOB-Feld geschrieben.

Die merkwürdigen Wunschträume dort oben... *kopfschüttel*... da könntest Du mehr Erfolg mit einem "copy c:\*.* Mysql\Blobfeld" haben...

Worauf ich hinauswollte: unter purem Batch kann es nicht gehen, weil es gar nicht möglich ist, derart große Dateien in Umgebungsvariablen mit einer Maximallänge von 255 Zeichen zu speichern. Ende.

Somit bleiben zwei weitere Möglichkeiten:
a) Du treibst irgendwo ein Utililty auf, das "WriteFileIntoMySQLBlob.exe" heißt und sich von der Konsole aus starten lässt. Halte ich für ausgeschlossen, dass es so etwas gibt. Macht wenig Sinn.
b) Du befüllst die MYSQL-DB via PHP, VB, C oder meinetwegen BASIC .. halt irgendeine Sprache mit MySQL-API und der Möglichkeit, Dateien binär einzulesen.

In einer dieser Sprachen dann ein Funktionspärchen PutFileIntoBlob()/GetFileFromBlob() zusammenzubraten, das wiederum schaffen wir hier im Forum.
Mit was greifst Du denn normalerweise auf MySQL zu?

Grüße Biber
Bitte warten ..
Mitglied: 20535
29.11.2005 um 14:40 Uhr
Das habe ich mir schon fast gedacht. Ich habe halt geschaut ob das mit einfacher Batch möglich ist oder nicht, da ich mir dachte, dass es sonst etwas oversizied wäre. Muss ja nur der Inhalt in das Blob :D

Da die Anwendung an sich in Java geschrieben ist, werde ich dann wohl darauf zurückgreifen.

Dennoch vielen Dank für die Hilfe.

Gruß,
Stephan
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Outlook & Mail
gelöst PST-Datei auf Server speichern (55)

Frage von SarekHL zum Thema Outlook & Mail ...

Batch & Shell
Neuere Datei per Batch ausfinding machen (2)

Frage von chattie zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (13)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...