[JAVA] Wenn Sie InputStream in JDBI3 binden möchten

Ich könnte es mit JDBI2 machen

@SqlUpdate("update samples set file = :file where flag = true")
int updateFile(@Bind("file") InputStream file);
@SqlUpdate("update samples set file = :file where flag = true")
fun updateFile(@Bind("file") file: InputStream?): Int

Mit JDBI3 ist das nicht möglich ...

org.jdbi.v3.core.statement.UnableToCreateStatementException: No argument factory registered for type ...

Ich bekomme einen Fehler wie

Wenn ich auf GitHub nach einer Fehlermeldung gesucht habe, ist ↓ verdächtig

return new UnableToCreateStatementException("No argument factory registered for '" + value + "' of qualified type " + qualifiedType, ctx);

https://github.com/jdbi/jdbi/blob/3c93a316d5cbf9507e668b62414daae759641e93/core/src/main/java/org/jdbi/v3/core/statement/ArgumentBinder.java#L174

Anscheinend muss das zu bindende Objekt die Argument-Schnittstelle implementieren.

(Fügen Sie Details hinzu, wenn Sie Lust dazu haben)

Schnittstelle für Bindung wurde vorbereitet

Die Lösung besteht darin, InputStreamArgument zu verwenden

@SqlUpdate("update samples set file = :file where flag = true")
int updateFile(@Bind("file") InputStreamArgument file);
@SqlUpdate("update samples set file = :file where flag = true")
fun updateFile(@Bind("file") file: InputStreamArgument?): Int

http://jdbi.org/apidocs/org/jdbi/v3/core/argument/InputStreamArgument.html

InputStream als erstes Argument Das zweite Argument ist die Größe des Streams Übergeben Sie im dritten Argument, ob es sich um ASCII handelt oder nicht

public InputStreamArgument(InputStream stream,
                           int length,
                           boolean ascii)
Parameters:
stream - the stream to bind
length - the length of the stream
ascii - true if the stream is ASCII

Recommended Posts

Wenn Sie InputStream in JDBI3 binden möchten
Wenn Sie Annotation in Java 8 dynamisch ersetzen möchten
ProxyFactory ist praktisch, wenn Sie AOP mit Spring testen möchten!
Ein Hinweis, wenn Sie Tupel in Java möchten
Wenn Sie die Methode außerhalb verwenden möchten
[Swift] Verwenden Sie nonzeroBitCount, wenn Sie in Swift popcnt möchten
[Ruby] Wenn Sie mehrere Zeichen ersetzen möchten
Wenn Sie irgendwo einen Fehler melden möchten, wenn Sie graphql-spring-boot mit Spring Boot verwenden
Code, der verwendet werden soll, wenn Sie Json nur mit Standardbibliotheken in Java verarbeiten möchten
Wenn Sie explizit ODER oder UND mit Ransack schreiben möchten
docker-compose.yml, wenn Sie MySQL auf Docker laufen lassen möchten
lombok.config, wenn Sie @Qualifier mit lombok an @RequiredArgsConstructor übergeben möchten
Delicate ist praktisch, wenn Sie Teile wiederverwenden möchten
[Ruby + Rails] Wenn Sie sich zusammen mit der Benutzerregistrierung in der Mailchimp-Mailingliste registrieren möchten
So schreiben Sie in die Modellklasse, wenn Sie mit PlayFramework Binärdaten in der Datenbank speichern möchten
Verwenden Sie JLine, wenn Sie Tastenanschläge auf der Konsole zeichenweise in Java verarbeiten möchten
Wenn Sie Java-Bibliothekstests mit Spock in mehreren Modulen mit Gradle in Android Studio 3 implementieren möchten
Wenn Sie die Hauptzweiginformationen in dem aktuellen Zweig wiedergeben möchten, an dem Sie gerade arbeiten
Wenn Sie die übergeordnete Klasse in Lomboks @builder aufnehmen möchten
Einstellung, die in bind.pry konvertiert wird, wenn Sie pry in VScode eingeben
Wenn Sie devise eingeführt haben, aber weitere Spalten hinzufügen möchten
Üben Sie die Verwendung, wenn Sie verschiedene Verarbeitungsgruppen seriell ausführen möchten
[Swift] Wenn Sie wissen möchten, ob die Anzahl der Zeichen in String mit einer bestimmten Anzahl übereinstimmt ...
So schreiben Sie, wenn Sie Zeilenumbrüche und Ausgaben beibehalten und XSS in Rails vermeiden möchten
Wie schreibe ich, wenn ich mit "C language string array" wie argv [] in Ruby-FFI umgehen möchte?
Was tun, wenn Sie die Quellposition wissen möchten, an der die Methode in bind.pry definiert ist?
Ein Memo, wenn Sie den Zeitteil des Kalenders löschen möchten
Wenn Rails eine Sitzung für einen bestimmten Controller deaktivieren soll
Zusammenfassung der Mittel, wenn Sie mit HTTP unter Android kommunizieren möchten
[RSpec] Wenn Sie die Instanzvariable des Controllers im Test verwenden möchten [Zuweisungen wird nicht empfohlen]
(Beschränkt auf Java 7 oder höher) Ich möchte, dass Sie Objekte in Objects.equals vergleichen
Grundlegende Rails-Befehle, die Sie lernen möchten
Wenn Sie Werte dynamisch einbetten und Attributwerten in Thymeleaf 3 Text hinzufügen möchten
Das erste, was Sie tun müssen, wenn Sie mit Heroku auf GitHub mit Eclipse auf Java zufrieden sein möchten
Ich möchte die IP-Adresse erhalten, wenn ich mit Java eine Verbindung zu Wi-Fi herstelle
Ich möchte bei der Registrierung in der Datenbank eine Fehlermeldung anzeigen
Ich möchte @Autowired in Servlet verwenden
Was tun, wenn Sie glauben, dass Sie mit IntelliJ IDEA CE nicht Groovy-> Java können?
Wenn Sie die Testabdeckung privater Methoden in JUnit erfüllen möchten
Möglicherweise möchten Sie die Methode remove in ArrayList nicht sehr oft verwenden
Android Studio-Memo, in dem Toast-Zeichen in großer Größe angezeigt werden sollen
Wenn Sie Datenbankspalten usw. ändern möchten.
Ich möchte eine E-Mail in Java senden.
Wenn Eclipse den Server nicht starten kann
Wenn Sie sich im Klassennamen verlieren
Ich möchte APP_HOME an Logback in Gradle übergeben
rsync4j - Ich möchte rsync in Java berühren.
So binden Sie mit einer Eigenschaftendatei in Spring Boot
Ich möchte irgendwann sogar in Kotlin sein
Dinge, die Sie beachten sollten, wenn Sie sich für CRuby entscheiden
Was verwenden Sie beim Konvertieren in String?
Was tun, wenn in PlayFramework eine IllegalStateException auftritt?