2009-05-13 17 views
6

Ich habe eine varbinary Spalte, die wir verwenden, um Excel-Dateien zu speichern. Ich muss diese Spalte mit dem Inhalt einer anderen xls-Datei aktualisieren, die sich gerade in meinem Dateisystem befindet.Wie speichere ich eine Binärdatei in einer SQL-Datenbank?

Gegeben eine java.sql.Connection, wie sollte ich die Zeile aktualisieren?

Wir verwenden SQL Server 2005

Antwort

5

landete ich folgendes tun:

PreparedStatement st = conn.prepareStatement("update MyTable set binaryData = ? where id= 9"); 
st.setBinaryStream(1, new FileInputStream(file), (int)file.length()); 
st.execute(); 
+1

Warnung: Wenn Ihre Datei länger als Integer.MAX_VALUE bytes ist, erhalten Sie durch die Umwandlung ihrer Länge() in einen int eine negative Zahl, was dazu führen kann, dass setBinaryStream nicht ordnungsgemäß funktioniert. Ich weiß nicht, warum setBinaryStream nicht als "long" deklariert wurde. –

0

Pass in einem Byte-Array zu einem BLOB Feld.

+0

versuchen Während diese Verbindung die Frage beantworten kann, es besser ist, die die wesentlichen Teile der einzubeziehen antworten Sie hier und geben Sie den Link als Referenz an. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert. –

+0

@TanmayPatil Dies ist keine Link-Only-Antwort. Es erklärt kurz, was Sie tun sollten. Schritt 1: Holen Sie sich ein Byte-Array. Schritt 2: Legen Sie es in ein BLOB-Feld. Was vermisse ich? Andere Ressourcen können Details bereitstellen, wenn Sie wirklich so viel Hand halten müssen. –

2

Mit einer java.util.Connection und der richtigen SQL könnten Sie eine geeignete java.sql.PreparedStatement (ich benutze nicht SQL Server, so dass Sie besser die SQL selbst schreiben wäre) erstellen.

Sie können einen java.sql.Blob mithilfe der Bytedaten aus Ihrer xls-Datei erstellen.

Rufen Sie .setBlob (Blob) auf Ihrem PreparedStatement auf und führen Sie es dann aus.

Ich habe den Code für Sie nicht geschrieben, aber das sollte die Grundlagen sein.

-2

In älteren Versionen von Java könnten Sie

obj.setObject("@somefield", some_data); 
+0

Ich postete dies, um jemandem zu helfen, der gezwungen sein könnte, sehr altes Java zu benutzen, ich befürworte das nicht als eine moderne Lösung. –

Verwandte Themen